Differences with bellard/quickjs
This project aims to be a drop-in replacement for those already using QuickJS. Minimal API changes might be necessary.
Community development
NG is developed in the open, interacting with the wider community and through these interactions many improvements have already been made, including the incorporation of patches previously maintained in other forks.
Each PR is reviewed, iterated on, and merged in GitHub.
To date, NG has had over 40 distinct contributors and over 400 PRs.
Consistent release cadence
As the project moves forward, a steady cadence of releases has been maintained, with an average of a new release every 2 months.
Testing
Since its inception testing has been a focus. Each PR is tested in over 50 configurations, involving different operating systems, build types and sanitizers.
The test262
suite is also ran for every change.
Cross-platform support
In order to better support other platforms such as Windows the build system was changed to use CMake.
In addition, Windows is treated as a first class citizen, with the addition of support for the MSVC compiler.
Performance
While being an interpreter limits the performance in comparison with other engines which use a JIT, several significant performance improvements have been made:
- Opcode fusion
- Polymorphic inline caching
- Memory allocation improvements
- Improved parse speeds
New ECMAScript APIs
The main focus of NG is to deliver state-of-the-art JavaScript features. Typically once they are stable (stage 4) but sometimes even at earlier stages. Here is a non-exhaustive list of ES features present in NG:
- Resizable ArrayBuffer
- Float16Array
- WeakRef
- FinalizationRegistry
- Iterator Helpers
- Promise.try
- Error.isError
- Set operations
Some non-standard but widely used APIs have also been added:
- V8's
Error.prepareStackTrace
andError.stackTraceLimit