summaryrefslogtreecommitdiffstats
path: root/development/quickjs/README
blob: ebc589068a717dbc37927cde97fc18ea5145289d (plain)
QuickJS is a small and embeddable Javascript engine by Fabrice Bellard
and Charlie Gordon. It supports the ES2020 specification including
modules, asynchronous generators, proxies and BigInt.
It optionally supports mathematical extensions such as big decimal
floating point numbers (BigDecimal), big binary floating point numbers
(BigFloat) and operator overloading.

Main Features:
* Small and easily embeddable: just a few C files, no external
  dependency.
* Fast interpreter with very low startup time
* Almost complete ES2020 support including modules, asynchronous
  generators and full Annex B support (legacy web compatibility).
* Passes nearly 100% of the ECMAScript Test Suite tests when selecting
  the ES2020 features.
* Can compile Javascript sources to executables with no external
  dependency.
* Garbage collection using reference counting (to reduce memory usage
  and have deterministic behavior) with cycle removal.
* Mathematical extensions: BigDecimal, BigFloat, operator overloading,
  bigint mode, math mode.
* Command line interpreter with contextual colorization in JS.
* Small built-in standard library with C library wrappers.

NOTE:
In order to adhere to Slackware standards the source is patched to:
* change library paths in the compiler
* build a shared library
Since the default behaviour of the compiler is to output statically
linked binaries, an aditional shared library is provided so that users
may produce C files from Javascript source code
(e.g.: qjsc -e in.js -o out.c), and then compile and link dynamically,
e.g.:
  cc -I /usr/include/quickjs out.c -o executable -lquickjs
I believe this is the less intrussive set of changes to achieve those
goals.