QuickJS
QuickJS copied to clipboard
QuickJS is a small and embeddable Javascript engine. QuickJS sources are copyright Fabrice Bellard and Charlie Gordon.
Original code is located at master
branch
Installation
Ubuntu
-
sudo apt-get install -y build-essential gcc-multilib
-
cd {/YOUR/PATH/TO/}QuickJS
-
make
-
sudo make install
# to use qjs and qjsc outside of repo folder
Mac
-
mod
branch contained mac fixes for undefinedenviron
in./quickjs-libc.c
- update xcode
-
make
-
sudo make install
# to use qjs and qjsc outside of repo folder
Getting Started
compile js to binary
create a hello_world1.js javascript file
console.log('Hello World')
goto command line and type
> ./qjsc -o hello_world1 ./hello_world1.js
> ./hello_world1
> Hello World
compile js with module to binary
create a hello_world2.js javascript file
import * as std from 'std'
console.log(std.getenv('msg'))
goto command line and type
> ./qjsc -o hello_world2 ./hello_world2.js
> SyntaxError: unsupported keyword: import
> ./qjsc -m -o hello_world2 ./hello_world2.js
> msg="Hello World w Import" ./hello_world2
> Hello World w Import
known issues
- doesn't support Blob
- doesn't support WebWorker
- exceptions in promise are silent. use
./qjs --unhandled-rejection {script.js}
to display exceptions - doesn't handle
Maximum call stack size exceeded
for recursive async function correctly. it crashes with segmentation error
fun facts
- compiled executable of
qjsc
does not has speed advantage compared with interpreting script withqjs
test it yourself
# run benchmark with interpretor
./qjs tests/microbench.js
# run benchmark with compiler
./qjsc -o microbench tests/microbench.js
./microbench