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)
20KB
363 行
注意:由于 ChakraCore 本身已不再积极开发,此项目目前不再维护。
chakracore-rs 是 ChakraCore(由 Rust 编写)的惯用包装器。
此仓库包含两个 crate
- chakracore-sys - 对 JavaScript 运行时的原始绑定。
- chakracore - 基于 chakracore-sys crate 的惯用包装器。
chakracore
这是一个围绕 JavaScript 运行时 (JSRT) 的包装器,用于 Microsoft Edge 和 node-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}
。
- Windows 上的默认值:
此脚本未与--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_64
、Ubuntu 16.10 x86_64
和Windows 10 x86_x64
上构建。
依赖项
~0–2MB
~41K SLoC