quickJs
小而完整的 JavaScript 引擎
安装
$ brew install quickjs使用
quickJs 提供了和 node 类似的命令行交互,通过 qjs 命令直接调用
$ qjs
QuickJS - Type "\h" for help
qjs > const a = 1
undefined
qjs > const b = 3
undefined
qjs > a + b
4
qjs >或者是执行一个 JS 文件
$ echo "console.log('Hello quickjs')" > test.js
$ qjs test.js
Hello quickjs使用 qjsc 可以编译 JS 到二进制文件
$ qjsc -o hello test.js
$ ./hello
Hello quickjs特性
官网宣称的几个特性
- 小巧且易于嵌入:只需几个 C 文件,无外部依赖性,一个简单的
hello world程序只需210 KiB。 - 快速解释器,启动时间极短:在台式电脑的单核上运行 ECMAScript Test Suite 的 75000 个测试仅需约 100 秒。运行时实例的整个生命周期不到 300 微秒。
- 几乎完全支持 ES2020,包括模块、异步生成器和完整的附件 B 支持(传统网络兼容性)。
- 可将 Javascript 源代码编译为可执行文件,无外部依赖性。
- 使用引用计数进行垃圾回收(以减少内存使用量,并具有确定性行为),并可去除循环。
- 命令行解释器,使用 Javascript 实现上下文着色。
- 小型内置标准库,带 C 库封装。
安全地执行 JS
可以使用基于 quickjs 的 justjake/quickjs-emscripten。在 Javascript 中安全地执行不受信任的 Javascript