过一段时间可能要用qjs,参考着github上的中文翻译再加上自己的机翻整理了一下,方便以后看
作为小白来说这东西真心看的一脸懵逼,很多地方看不懂
慢慢来吧~等变强了就看得懂了
quickJS JavaScript引擎
1. 简介
QuickJS是一个小型并且可嵌入的Javascript引擎,它支持ES2020规范,包括模块,异步生成器和代理器。
它可选支持数学扩展,例如大整数 (BigInt),大浮点数 (BigFloat) 以及运算符重载。
1.1 主要特性
- 轻量而且易于嵌入:只需几个C文件,没有外部依赖,一个x86下的简单的“hello world”程序只要180 KiB。
- 具有极低启动时间的快速解释器: 在一台单核的台式PC上,大约在100秒内运行ECMAScript 测试套件56000次。运行时实例的完整生命周期在不到300微秒的时间内完成。
- 几乎完整实现ES2019支持,包括: 模块,异步生成器和和完整Annex B支持 (传统的Web兼容性)。许多ES2020中带来的特性也依然会被支持。
- 通过100%的ECMAScript Test Suite测试。
- 可以将Javascript源编译为没有外部依赖的可执行文件。
- 使用引用计数(以减少内存使用并具有确定性行为)的垃圾收集与循环删除。
- 数学扩展:BigInt, BigFloat, 运算符重载, bigint模式, math模式.
- 在Javascript中实现的具有上下文着色和完成的命令行解释器。
- 采用C包装库构建的内置标准库。
2. 用法
2.1 安装
提供Makefile可以在Linux或者MacOS/X上编译。通过使用MinGW工具在Linux主机上进行交叉编译,可以获得初步的Windows支持。
如果要选择特定选项,请编辑Makefile
顶部,然后运行make
。
使用root身份执行 make install
可以将编译的二进制文件和支持文件安装到 /usr/local
(这不是使用QuickJS所必需的).
2.2 快速入门
qjs
是命令行解析器 (Read-Eval-Print Loop). 您可以将Javascript文件和/或表达式作为参数传递以执行它们:
./qjs examples/hello.js
qjsc
是命令行编译器:
./qjsc -o hello examples/hello.js
./hello
生成一个没有外部依赖的 hello
可执行文件。
2.3 命令行选项
2.3.1 qjs解释器
用法: qjs [options] [files]
选项 | 说明 |
---|---|
-h / --help | 命令行选项列表 |
-e EXPR / --eval EXPR | 执行EXPR |
-i / --interactive | 转到交互模式(在命令行上提供文件时,它不是默认模式). |
-m / --module | 作为ES6模块加载(默认=自动检测)。如果一个模块的文件名的扩展名是.mjs,或者源文件的第一个关键字是import,则模块会被自动检测。 |
–script | 作为ES6脚本加载(默认=自动检测)。 |
–bignum | 启用bignum扩展。BigDecimal对象、BigFloat对象和 "use math "指令。 |
-I file / --include file | 包括一个附加的文件。 |
高级选项:
选项 | 说明 |
---|---|
–std | 使加载的脚本可以使用std和os模块,即使它不是一个模块。 |
-d / --dump | 转存内存使用情况统计信息。 |
-q / --quit | 只是实例化解释器并退出。 |
2.3.2 qjsc编译器
用法: qjsc [options] [files]
选项 | 说明 |
---|---|
-c | 只输出C文件中的字节码。默认是输出一个可执行文件。 |
-e | 在一个C文件中输出main()和字节码。默认是输出一个可执行文件 |
-o output | 设置输出文件名(默认= out.c或a.out)。 |
-N cname | 设置生成数据的C名称。 |
-m | 编译为Javascript模块(默认=自动检测)。 |
-D module_name | 编译一个动态加载的模块和它的依赖项。当你的代码使用import关键字或os.Worker构造函数时,需要这个选项,因为编译器不能静态地找到动态加载的模块的名称。 |
-M module_name[,cname] | 为一个外部C模块添加初始化代码。见c_module示例 |
-x | 字节交换输出(仅用于交叉编译)。 |
-flto | 使用链接时间优化。编译速度较慢,但可执行文件较小 和更快。当使用-fno-x选项时,这个选项会自动设置。 |
-fno-[eval|string-normalize|regexp|json|proxy|map|typedarray|promise|bigint] | 禁用选定的语言功能,以产生一个较小的可执行文件。 |
-fbignum | 启用bignum扩展:BigDecimal对象、BigFloat对象和 "use math "指令。 |
2.4 qjscalc 应用程序
该qjscalc
应用程序是qjsbn
命令行解释器的超集,它实现了一个具有任意大整数和浮点数,分数,复数,多项式和矩阵的Javascript计算器。源代码在