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 内存管理

Download history 8478/week @ 2024-04-15 7908/week @ 2024-04-22 5797/week @ 2024-04-29 10621/week @ 2024-05-06 9242/week @ 2024-05-13 8448/week @ 2024-05-20 6153/week @ 2024-05-27 6132/week @ 2024-06-03 5977/week @ 2024-06-10 6075/week @ 2024-06-17 6282/week @ 2024-06-24 6954/week @ 2024-07-01 7385/week @ 2024-07-08 6264/week @ 2024-07-15 6869/week @ 2024-07-22 6722/week @ 2024-07-29

27,529 每月下载量
34 个存储库 中使用(3 个直接使用)

MIT 许可协议

4.5MB
129K SLoC

C 75K SLoC // 0.0% comments Rust 45K SLoC // 0.0% comments JavaScript 8K SLoC // 0.0% comments Bitbake 500 SLoC // 0.1% comments Shell 107 SLoC // 0.1% comments

rquickjs-core

github crates docs status

此库是 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 处理,反之亦然
    • 原生支持 TokioAsyncStd 运行时
    • 几乎与任何异步运行时或执行器轻松集成
  • Rust 与 JS 之间灵活的数据转换
    • 许多广泛使用的 Rust 类型可以转换为 JS,反之亦然
    • FromJsIntoJs 继承宏也可以帮助适应用户定义的类型
  • 支持用户定义的分配器
    • 可以使用自定义分配器创建 Runtime
    • 完全支持使用 Rust 的全局分配器
  • 支持用户定义的模块解析器和加载器,也可以组合以获得更灵活的解决方案
  • 支持使用 embed 宏将 JS 模块打包为字节码
  • 支持延迟调用 JS 函数
  • 完全支持 ES6 类
    • Rust 数据类型可以表示为 JS 类
    • 可以通过对象属性访问数据字段
    • 支持静态和实例成员
    • 可以使用获取器和设置器定义属性
    • 支持常量静态属性
    • 支持保留对 JS 对象的引用(包含引用的数据类型应实现 HasRefs 特性以使垃圾回收器正常工作)
    • 支持通过 JS 扩展定义的类
  • 使用过程宏轻松绑定(使用 bind 宏,JS 与 Rust 之间的接口变得非常简单)

开发状态

此绑定功能完整,大多数稳定,准备就绪。错误处理是未来可能发生变化的事情。一些实验性功能,如 parallel,可能不会按预期工作。使用风险自负。

许可证

此库根据 MIT 许可证 授权

依赖项