1 个不稳定版本

0.0.4 2024年2月27日

#3#quick-js


用于 qjs-ng

MIT 许可

155KB
5K SLoC

rquickjs

github crates docs status

这个库是一个高级绑定 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,反之亦然
    • FromJsIntoJs 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