#javascript #js #chakracore #jsrt

sys chakracore-sys

对 JSRT(ChakraCore API)的低级别绑定

7 个版本

使用旧 Rust 2015

0.2.3 2018 年 1 月 19 日
0.2.2 2017 年 6 月 24 日
0.2.0 2017 年 2 月 10 日
0.1.0 2016 年 12 月 10 日
0.0.2 2016 年 11 月 24 日

#7#ecmascript

每月下载量 39
2 个 crate 中使用(通过 chakracore

MIT 许可证

20KB
363

注意:由于 ChakraCore 本身已不再积极开发,此项目目前不再维护。

chakracore-rs

crates.io version Documentation Language (Rust)

chakracore-rs 是 ChakraCore(由 Rust 编写)的惯用包装器。

此仓库包含两个 crate

  • chakracore-sys - 对 JavaScript 运行时的原始绑定。
  • chakracore - 基于 chakracore-sys crate 的惯用包装器。

chakracore

这是一个围绕 JavaScript 运行时 (JSRT) 的包装器,用于 Microsoft Edgenode-chakracore。该库仍处于预发布状态,且不稳定。测试尝试覆盖尽可能多的功能,但可能会出现内存泄漏和段错误。如果您需要一个更稳定的库,请直接使用底层 API;chakracore-sys

安装

将此添加到您的 Cargo.toml

[dependencies]
chakracore = "0.2"

... 并将其添加到您的 crate 根目录

extern crate chakracore as js;

注意:有关 chakracore-sys 的额外构建说明

示例

你好,世界

extern crate chakracore as js;

fn main() {
  let runtime = js::Runtime::new().unwrap();
  let context = js::Context::new(&runtime).unwrap();
  let guard = context.make_current().unwrap();

  let result = js::script::eval(&guard, "5 + 5").unwrap();
  assert_eq!(result.to_integer(&guard), 10);
}

函数 - 乘法

extern crate chakracore as js;

fn main() {
  let runtime = js::Runtime::new().unwrap();
  let context = js::Context::new(&runtime).unwrap();
  let guard = context.make_current().unwrap();

  let multiply = js::value::Function::new(&guard, Box::new(|guard, info| {
      let result = info.arguments[0].to_integer(guard)
                 * info.arguments[1].to_integer(guard);
      Ok(js::value::Number::new(guard, result).into())
  }));

  let result = multiply.call(&guard, &[
      &js::value::Number::new(&guard, 191).into(),
      &js::value::Number::new(&guard, 7).into(),
  ]).unwrap();

  assert_eq!(result.to_integer(&guard), 1337);
}

chakracore-sys

此库处理 JavaScript 运行时的静态和动态链接。Rust 绑定是实时生成的(针对接口),因此整个 API 都被公开并可访问。

可以在 src/lib.rs 中找到 你好,世界 示例。

生成的绑定的示例可以在 这里 找到。

要求

此库在源代码树中构建 ChakraCore 组件。它通过构建脚本克隆并以测试模式构建(与发布相同,但包括更多的运行时检查)。如果需要自定义构建设置,可以手动构建 ChakraCore,在树外构建,并使用两个环境变量指定

  • CHAKRA_SOURCE:ChakraCore 检出的根目录。
  • CHAKRA_BUILD:构建的 bin 目录。
    • Windows 上的默认值:%CHAKRA_SOURCE%\Build\VcBuild\bin\{BUILD_TYPE}
    • 在Unix上的默认设置: $CHAKRA_SOURCE/BuildLinux/{BUILD_TYPE}

此脚本未与--embed-icu选项进行测试。

静态/共享

默认情况下,此库动态链接ChakraCore。存在一个名为static的功能,它通过链接到生成的存档来构建它。截至此时,在Windows上,只有共享库构建可用(见#279)。

先决条件

此库自然共享ChakraCore的所有依赖项。除此之外,构建脚本中使用rust-bindgen,它需要clang-3.8或更高版本。在Unix上还需要pkg-config

Windows
  • Visual Studio 2013/2015/2017与
    • Windows SDK 8.1
    • C++支持
  • clang-3.8或更高版本。下载可以在这里找到。
    请记住,在安装过程中将LLVM目录添加到PATH中。
  • Rust MSVC工具链(即rustup install stable-msvc)。
    这是必需的,因为ChakraCore使用MSVC ABI。
  • 如果为ARM构建: Windows 10 SDK(2015年7月)
macOS
$ brew install cmake icu4c llvm38 pkg-config
基于Debian的Linux
# apt-get install -y build-essential cmake clang libunwind8-dev \
#     libicu-dev llvm-3.8-dev libclang-3.8-dev pkg-config liblzma-dev

构建

  • Windows

    确保您在Visual Studio命令行环境中运行,无论是通过源vcvarsall.bat,还是通过Visual Studio命令提示符进行构建。

    $ cargo test -vv
    
  • Unix
    $ cargo test -vv [--features static]
    

如果您在构建过程中遇到问题,请打开一个问题

状态

此库已在macOS 10.12 x86_64Ubuntu 16.10 x86_64Windows 10 x86_x64上构建。

依赖项

~0–2MB
~41K SLoC