27 个版本
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.1.1 | 2021 年 2 月 7 日 |
#616 in 内存管理
27,529 每月下载量
在 34 个存储库 中使用(3 个直接使用)
4.5MB
129K SLoC
rquickjs-core
此库是 QuickJS JavaScript 引擎的高级绑定。其目标是提供一个易于使用且安全的包装器,类似于 rlua 库。
QuickJS 是一个小型且易于嵌入的 JavaScript 引擎。它支持 ES2020 规范,包括模块、异步生成器、代理和 BigInt。它可选支持数学扩展,如大十进制浮点数(BigDecimal)、大二进制浮点数(BigFloat)和运算符重载。
QuickJS 的主要功能
- 小型且易于嵌入:仅需几个 C 文件,无外部依赖,简单的 hello world 程序仅需 210 KiB 的 x86 代码。
- 快速的解释器,启动时间非常低:在桌面 PC 的单个核心上,大约需要 100 秒钟运行 ECMAScript 测试套件的 75000 个测试。运行时实例的完整生命周期在 300 微秒以下完成。
- 几乎完全支持 ES2020,包括模块、异步生成器和完整的附录 B 支持(遗留 Web 兼容性)。
- 选择 ES2020 功能时,几乎通过 ECMAScript 测试套件的 100% 测试。测试报告可在 Test262 报告中找到。
- 可以将 JavaScript 源代码编译成可执行文件,无需外部依赖。
- 使用引用计数(以减少内存使用并获得确定性行为)进行垃圾收集,并具有循环移除功能。
- 数学扩展:BigDecimal、BigFloat、运算符重载、bigint 模式、数学模式。
- 带有 JavaScript 实现的上下文着色命令行解释器。
- 小型内置标准库,带有 C 库包装器。
此存储库提供的功能
- 与 async Rust 完全集成
- ES6 Promises 可以作为 Rust futures 处理,反之亦然
- 原生支持 Tokio 和 AsyncStd 运行时
- 几乎与任何异步运行时或执行器轻松集成
- Rust 与 JS 之间灵活的数据转换
- 许多广泛使用的 Rust 类型可以转换为 JS,反之亦然
FromJs
和IntoJs
继承宏也可以帮助适应用户定义的类型
- 支持用户定义的分配器
- 可以使用自定义分配器创建
Runtime
- 完全支持使用 Rust 的全局分配器
- 可以使用自定义分配器创建
- 支持用户定义的模块解析器和加载器,也可以组合以获得更灵活的解决方案
- 支持使用
embed
宏将 JS 模块打包为字节码 - 支持延迟调用 JS 函数
- 完全支持 ES6 类
- Rust 数据类型可以表示为 JS 类
- 可以通过对象属性访问数据字段
- 支持静态和实例成员
- 可以使用获取器和设置器定义属性
- 支持常量静态属性
- 支持保留对 JS 对象的引用(包含引用的数据类型应实现
HasRefs
特性以使垃圾回收器正常工作) - 支持通过 JS 扩展定义的类
- 使用过程宏轻松绑定(使用
bind
宏,JS 与 Rust 之间的接口变得非常简单)
开发状态
此绑定功能完整,大多数稳定,准备就绪。错误处理是未来可能发生变化的事情。一些实验性功能,如 parallel
,可能不会按预期工作。使用风险自负。
许可证
此库根据 MIT 许可证 授权