31 个版本

0.6.2 2024年5月6日
0.6.0 2024年4月25日
0.5.1 2024年2月21日
0.4.0 2023年12月8日
0.0.4 2020年3月8日

#11 in 编程语言

Download history 9175/week @ 2024-05-03 9827/week @ 2024-05-10 8436/week @ 2024-05-17 6872/week @ 2024-05-24 6206/week @ 2024-05-31 5975/week @ 2024-06-07 5753/week @ 2024-06-14 6224/week @ 2024-06-21 7342/week @ 2024-06-28 6924/week @ 2024-07-05 6708/week @ 2024-07-12 6760/week @ 2024-07-19 7371/week @ 2024-07-26 7921/week @ 2024-08-02 7799/week @ 2024-08-09 8155/week @ 2024-08-16

32,677 每月下载量
用于 33 个crate(直接使用25个)

MIT 许可证

570KB
13K SLoC

rquickjs

github crates docs status

此库是QuickJS JavaScript引擎的高级绑定。它的目标是成为一个易于使用且安全的包装器,类似于rlua库。

QuickJS 是一个小巧且易于嵌入的JavaScript引擎。它支持ES2020规范,包括模块、异步生成器、代理和BigInt。它可选支持数学扩展,如大十进制浮点数(BigDecimal)、大二进制浮点数(BigFloat)和运算符重载。

QuickJS的主要功能

  • 小巧且易于嵌入:只需几个C文件,无外部依赖,简单的hello world程序只需210 KiB的x86代码。
  • 快速解释器,启动时间非常低:在台式PC的单核上运行ECMAScript测试套件的75000个测试大约需要100秒。运行时实例的完整生命周期小于300微秒。
  • 几乎完全支持ES2020,包括模块、异步生成器和完整的附录B支持(旧版网页兼容性)。
  • 选择ES2020功能时,几乎通过了ECMAScript测试套件的100%测试。测试262报告中有总结。
  • 可以编译JavaScript源代码为可执行文件,无外部依赖。
  • 使用引用计数进行垃圾回收(以减少内存使用并具有确定性行为),并删除循环。
  • 数学扩展:BigDecimal、BigFloat、运算符重载、bigint模式、数学模式。
  • 具有JavaScript实现上下文着色的命令行解释器。
  • 小巧的内置标准库,带有C库包装器。

此crate提供的功能

  • 与异步Rust的完全集成
    • ES6 Promise可以作为Rust future处理,反之亦然
    • 几乎与任何异步运行时或执行器轻松集成
  • Rust和JS之间的灵活数据转换
    • 许多广泛使用的Rust类型可以转换为JS,反之亦然
    • FromJsIntoJs推导宏还可以帮助适配用户定义的类型
  • 支持用户定义的分配器
    • 可以使用自定义分配器创建Runtime
    • 也完全支持使用Rust的全局分配器
  • 支持用户定义的模块解析器和加载器,也可以组合起来以获得针对具体情况的更灵活的解决方案
  • 支持使用embed宏将JS模块捆绑为字节码
  • 支持延迟调用JS函数
  • 完全支持ES6类
    • Rust数据类型可以表示为JS类
    • 可以通过对象属性访问数据字段
    • 同时支持静态和实例成员
    • 属性可以用getter和setter定义
    • 支持常量静态属性
    • 支持持有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许可证授权

依赖项

~4–5MB
~138K SLoC