Skip to content

Latest commit

 

History

History
61 lines (53 loc) · 1.61 KB

README.md

File metadata and controls

61 lines (53 loc) · 1.61 KB

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 undefined environ 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 with qjs

test it yourself

# run benchmark with interpretor
./qjs tests/microbench.js

# run benchmark with compiler
./qjsc -o microbench tests/microbench.js
./microbench