#quickjs #interpreter #js #javascript-engine #javascript #engine #x86-64

quickjspp

QuickJS Javascript引擎封装,使用名为quickjspp的quickjs分支

13个不稳定版本 (5个重大更改)

0.6.0-rc.12024年5月18日
0.5.0 2024年4月8日
0.4.6 2024年2月10日
0.4.5 2023年10月28日
0.1.0 2023年3月4日

#621 in Web编程

每月45次下载

MIT 许可证

3MB
89K SLoC

C 76K SLoC // 0.0% comments Rust 6.5K SLoC // 0.0% comments JavaScript 5.5K SLoC // 0.0% comments Bitbake 424 SLoC // 0.1% comments Shell 22 SLoC // 0.1% comments

quickjspp-rs

Crates.io docs.rs

这是quickjs-rs的一个分支,但它用Andrew Fedoniouk的分支quickjspp替换了原始的quickjs绑定,后者与MSVC兼容/可编译。

QuickJS是Fabrice Bellard和Charlie Gordon开发的一个新的、小巧的JavaScript引擎。它运行速度快,支持完整的ES2020规范。

QuickJSpp是Andrew Fedoniouk(又名c-smile)的Quickjs的一个分支。

此crate允许您轻松地在Rust中运行和集成JavaScript代码。

快速入门

[dependencies]
quickjspp = "0.5.0"
use quickjspp::{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();

可选特性

此crate支持以下特性

  • serde: (默认启用)。启用serde方法from_jsto_js,在quickjs环境中在Rust类型和js值之间进行转换。它应该与serde_json兼容,但尚未测试。请参阅示例了解更多信息。

  • chrono: chrono集成

    • 添加了一个JsValue::Date变体,它可以与JS Date进行序列化和反序列化
  • bigint: 通过num-bigint支持任意精度整数

  • log: 允许将console.log消息转发到logcrate。注意:必须使用ContextBuilder::console(quickjspp::console::LogConsole);启用

  • 修补版 自动启用了一些其他功能,如 大整数。您不需要手动启用此功能。应用 QuickJS 补丁,这些补丁可在 libquickjs-sys/embed/patches 目录中找到。

安装

默认情况下,quickjs 与 libquickjs-sys crate 绑定并自动编译,前提是您有适当的依赖。

Windows 支持

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

系统安装

要使用系统安装(不带捆绑功能),首先安装所需的依赖,然后编译和安装 quickjspp。

然后,您需要在 libquickjs-sys crate 中禁用 捆绑 功能,以强制使用系统版本。

依赖项

~1.4–2.4MB
~45K SLoC