#javascript #quickjs #js #run-time #interpreter

quickjs-rusty

一个 Rusty QuickJS (QuickJS-NG) JavaScript 引擎包装器,以及其他功能

4 个版本

0.6.3 2024年7月7日
0.6.2 2024年7月2日
0.6.1 2024年6月30日
0.6.0 2024年6月19日

#1371 in 网页编程

每月 21 次下载
5 个 Crates 中使用(通过 hai_runtime

MIT 许可证

3MB
90K SLoC

C 77K SLoC // 0.0% comments Rust 6.5K SLoC // 0.0% comments JavaScript 5.5K SLoC // 0.0% comments Bitbake 423 SLoC // 0.1% comments Shell 21 SLoC

quickjs-rusty

Crates.io docs.rs

QuickJS 是由 Fabrice Bellard 和 Charlie Gordon 开发的一个小型且可嵌入的 JavaScript 引擎。它支持包括模块、异步生成器、代理和 BigInt 在内的 ES2023 规范。
Quickjs-NG 是 QuickJS 最活跃的分支之一,并由一个专注于重燃项目的社区维护。

此 crate 允许您轻松访问和使用 QuickJS 的所有功能。它还提供了强大的 Rust-JS 类型转换和互操作性能力。

快速入门

[dependencies]
quickjs-rusty = "0.6.3"
use quickjs_rusty::{Context, JsValue};

let context = Context::new().unwrap();

// Eval.

let value = context.eval("1 + 2").unwrap();
assert_eq!(value, JsValue::Int(3));

let value = context.eval_as::<String>(" var x = 100 + 250; x.toString() ").unwrap();
assert_eq!(&value, "350");

// Callbacks.

context.add_callback("myCallback", |a: i32, b: i32| a + b).unwrap();

context.eval(r#"
    // x will equal 30
    var x = myCallback(10, 20);
"#).unwrap();

注意:此项目源自 quickjs-rs,但已进行了重大重构。与原始项目相比,它具有完全不同的代码结构和功能设计。

可选功能

此 crate 支持以下功能

  • serde: (默认启用)。 启用 serde 方法 from_jsto_js,以在 QuickJS 上下文中在 Rust 类型之间进行转换。它应与 serde_json 兼容,但尚未测试。更多信息请参阅 示例
  • chrono: (默认启用)。 chrono 集成
    • 添加了一个 JsValue::Date 变体,可以将其(反)序列化为 JS Date
  • bigint: (默认启用)。 通过 num-bigint 提供任意精度整数支持

安装

默认情况下,quickjs 与 libquickjs-sys crate 集成,并自动编译,前提是你有适当的依赖项。

Windows 支持

quickjspp-rs 可以在目标 x86_64-pc-windows-msvc 下使用

系统安装

要使用系统安装(不包含集成功能),首先安装所需的依赖项,然后编译和安装 quickjspp。

然后您需要禁用 bundled 功能,以强制使用系统版本。

依赖项

~1.4–2.4MB
~44K SLoC