Fabrice Bellard, the creator of FFmpeg, a command line tool to convert audio and video formats and QEMU, open-source virtual machine monitor, along with Charlie Gordon, a C expert, have together announced the first public release of QuickJS.
The public version of QuickJS is released under the MIT license and is a “small but complete JavaScript engine” that comes with support for the latest ES2019 language specifications. It is a complete JavaScript engine, that comes with support for the latest ES2019 language specification.
The project is co-created by Fabrice Bellard and Charlie Gordon. Bellard has made a number of contributions including the Tiny C Compiler, FFmpeg, and QEMU. Even the formula used to calculate the nth digit of π in base 16 was created by him. Programming legend, Bellard also holds the World Record for calculating pi to about 2700 billion decimal digits in 2009. Here’s what QuickJS offers:
ES2019 Support: This is the first JS engine to offer ES2019 specification. The JS specification brings almost complete engine features including modules, asynchronous generators, and full Annex B support. This currently does not support realms or tail calls.
Small structure: The small and easily embeddable structure of QuickJS does not have any external dependency. The engine is formed by only a few C files.
Faster interpreter: The interpreter of QuickJS shows impressive speed by running 56,000 tests from ECMAScript Test Suite1. The engine takes just 100 seconds to complete the tests on a single-core CPU.
No external dependency: QuickJS can compile JavaScript source to executables without creating any external dependency.
Command-line interpreter: The command-line interpreter offers contextual colorisation and completion implemented in JavaScript.
Mathematical extensions: QuickJS comes with all the mathematical extensions in the ‘qjsbn’ version. All these features are fully backward compatible with standard JavaScript. It also supports big integers (BigInt), big floating point numbers (BigFloat), operator overloading, and ‘bigint’, ‘math’ modes.
Garbage collection: The engine uses reference counting with cycle removal to automatically free-up objects. The engine reduces memory usage and ensures deterministic behaviour of JavaScript engine.