1 个不稳定版本
0.0.4 | 2024年2月27日 |
---|
#3 在 #quick-js
用于 qjs-ng
155KB
5K SLoC
rquickjs
这个库是一个高级绑定 QuickJS JavaScript 引擎。它的目标是成为一个易于使用、安全且类似于 rlua 库的包装器。
QuickJS 是一个小型且可嵌入的 JavaScript 引擎。它支持 ES2020 规范,包括模块、异步生成器、代理和 BigInt。它可选地支持数学扩展,如大数浮点数(BigDecimal)、大二进制浮点数(BigFloat)和运算符重载。
QuickJS 的主要功能
- 小型且易于嵌入:只需几个 C 文件,无外部依赖,简单 hello world 程序的 x86 代码大小为 210 KiB。
- 快速解释器,启动时间非常低:在台式机的单个核心上运行 ECMAScript 测试套件的 75000 个测试大约需要 100 秒。运行时实例的完整生命周期在不到 300 微秒内完成。
- 几乎完全支持 ES2020,包括模块、异步生成器和完整的附件 B 支持(旧版 Web 兼容性)。
- 选择 ES2020 功能时,通过几乎 100% 的 ECMAScript 测试套件测试。测试报告摘要可在 Test262 报告中找到。
- 可以编译 JavaScript 源代码为可执行文件,无需外部依赖。
- 使用引用计数(以减少内存使用并获得确定性行为)的垃圾回收,并具有循环移除功能。
- 数学扩展:BigDecimal、BigFloat、运算符重载、bigint 模式、数学模式。
- 具有 JavaScript 实现的上下文颜色化的命令行解释器。
- 小型内置标准库,带有 C 库包装器。
此 crate 提供的功能
- 与异步 Rust 完全集成
- ES6 Promise 可以作为 Rust future 处理,反之亦然
- 易于与几乎所有异步运行时或执行器集成
- Rust 和 JS 之间灵活的数据转换
- 许多广泛使用的 Rust 类型可以转换为 JS,反之亦然
FromJs
和IntoJs
derive 宏可以帮助适配用户定义的类型
- 支持用户定义的分配器
- 可以使用自定义分配器创建
Runtime
- 也完全支持使用 Rust 的全局分配器
- 可以使用自定义分配器创建
- 支持用户自定义模块解析器和加载器,也可以组合使用,以获得更灵活的解决方案
- 支持使用
embed
宏将 JS 模块打包为字节码 - 支持延迟调用 JS 函数
- 完全支持 ES6 类
- Rust 数据类型可以表示为 JS 类
- 可以通过对象属性访问数据字段
- 同时支持静态和实例成员
- 属性可以用获取器和设置器定义
- 支持定义常量静态属性
- 支持持有 JS 对象的引用(持有引用的数据类型应该实现
HasRefs
特性以使垃圾收集器正常工作) - 支持通过 JS 扩展定义的类
- 使用 proc 宏轻松绑定(使用
bind
宏使得 JS 和 Rust 之间的接口变得更加容易)
开发状态
此绑定功能完整,大部分稳定,可供使用。未来的更改可能仅限于错误处理。一些实验性功能,如 parallel
,可能无法按预期工作。使用风险自负。
在 Windows 上使用 rquickjs
请注意,QuickJS 库不支持 Windows 原生,此库通过修补 QuickJS 来支持 Windows。对于修补,我们使用 patch
工具,该工具在为 Windows 构建时需要安装。有关更多信息,请参阅 #88。
支持的平台
Rquickjs 需要编译一个具有其自身限制的 C 库,并且还需要为该平台生成绑定。因此,rquickjs 可能无法在 Rust 支持的所有平台上编译。通常,您始终可以尝试使用 bindgen
功能编译 rquickjs,这对于大多数平台应该有效。Rquickjs 为有限数量的平台提供绑定,对于这些平台,您不需要启用 bindgen
功能。以下为支持平台的列表。
平台 | 提供的绑定 | 已测试 | 由 quickjs 支持 |
---|---|---|---|
x86_64-unknown-linux-gnu | ✅ | ✅ | ✅ |
i686-unknown-linux-gnu | ✅ | ✅ | ✅ |
aarch64-unknown-linux-gnu | ✅ | ✅ | ✅ |
x86_64-unknown-linux-musl | ✅ | ✅ | ✅ |
aarch64-unknown-linux-musl | ✅ | ✅ | ✅ |
x86_64-pc-windows-gnu | ✅ | ✅ | ✅ |
i686-pc-windows-gnu | ✅ | ✅ | ✅ |
x86_64-pc-windows-mvsc | ✅ | ✅ | ❌ 实验性! |
x86_64-apple-darwin | ✅ | ✅ | ✅ |
aarch64-apple-darwin | ✅ | ❌ | ✅ |
wasm32-wasi | ✅ | ❌ | ✅ |
其他 | ❌ | ❌ | 未知 |
许可证
此库根据 MIT 许可证 许可
依赖关系
~0–1.1MB
~11K SLoC