#javascript #js #jrst

chakracore

对 JRST(ChakraCore API)的高层绑定

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2017年6月24日
0.1.0 2017年2月13日

#7 in #ecmascript

21 每月下载量
用于 leafers

MIT 许可证

105KB
2K SLoC

chakracore-rs

crates.io version Language (Rust)

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

文档

Chakracore - master

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
chakracore = "0.1.0"

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

extern crate chakracore as js;

该库本身简单易安装,但其 chakracore-sys 依赖项则不是。为确保构建成功,请查看 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);
}

依赖项

~2.6–5.5MB
~113K SLoC