A community-driven QuickJS fork.
In addition to the relevant features and optimizations in the TODO file, the more important optimizations are:
- Column number
- Basic Debugger API
- Poly IC
- Self Poly IC
- Prototype Poly IC
- Replace malloc To mimalloc
- Improve The Performance Of GC
In our plan, we first complete the above optimizations and then gradually add the remaining parts.
git clone --recurse-submodules https://github.com/openquickjs/quickjs.gitbrew install cmake ninja # macOS
sudo apt install cmake ninja-build # UbuntuThe Windows build environment is not yet officially supported.
bash scripts/build.sh # build quickjs qjs
bash scripts/test.sh # run test262 testsYou can find libquickjs.a in lib folder and qjs / run-test262 in bin folder.
- If you're using Visual Studio Code, you can use the
CMake Toolsextension to build the program. - If you're using CLion, you can open the project directly to build the program.
Using VSCode or CLion for regular development is recommended.
Install Debug Tools if you need.
brew install lldb # macOS
sudo apt install lldb # UbuntuIf you're using VSCode, you can use the C/C++ and Code LLDB extension to debug.
Average memory statistics for 75250 tests:
NAME COUNT SIZE
memory allocated 1011 124975 (123.6 per block)
memory used 967 117030 (0 overhead, 8.2 average slack)
atoms 532 26858 (50.5 per atom)
objects 172 12425 (72.2 per object)
properties 876 15798 (5.1 per object)
shapes 60 13809 (230.2 per shape)
bytecode functions 13 1685
bytecode 13 931 (71.6 per function)
C functions 100
arrays 1
fast arrays 1
elements 1 16 (1.0 per fast array)
Result: 515/75250 errors, 1392 excluded, 7972 skipped, 515 new
- Apple M1 Pro
- macOS Monterey 12.2.1
- Clang 13.0.0 arm64-apple-darwin21.3.0
| bellard/quickjs (2788d71) | openwebf/quickjs (latest) | |
|---|---|---|
| Richards | 1188 | 1457 |
| Crypto | 1443 | 1527 |
| RayTrace | 744 | 1995 |
| NavierStokes | 2775 | 2979 |
| DeltaBlue | 1100 | 1595 |
| Total score | 1312 | 1840 (+40.2%) |
| File Size(KB) | 1.3M | 1.4M |