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 编程语言
32,677 每月下载量
用于 33 个crate(直接使用25个)
570KB
13K SLoC
rquickjs
此库是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,反之亦然
FromJs
和IntoJs
推导宏还可以帮助适配用户定义的类型
- 支持用户定义的分配器
- 可以使用自定义分配器创建
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