81 个版本 (34 个稳定版本)
1.19.0 | 2024年6月30日 |
---|---|
1.17.1 | 2024年2月2日 |
1.16.3 | 2023年10月31日 |
1.15.1 | 2023年6月26日 |
0.2.0 | 2016年3月26日 |
#6 在 嵌入式开发 中排名
每月下载量 94,435
用于 161 个软件包 (99 个直接使用)
2MB
36K SLoC
Rhai - 用于 Rust 的嵌入式脚本语言
Rhai 是一个嵌入式脚本语言和评估引擎,用于 Rust,它为将脚本添加到任何应用程序提供了一种安全且简单的方法。
目标和构建
- 支持 Rust 所有的 CPU 和操作系统目标,包括
- WebAssembly (WASM)
no-std
- 最低 Rust 版本 1.66.0
标准功能
- 类似于 JavaScript+Rust 的简单语言,具有 动态类型。
- 高效的评估(在单个核心 2.6 GHz Linux 虚拟机上,1 百万次迭代用时 0.14 秒)。
- 与原生 Rust 函数 和 类型(包括 getter/setter、方法 和 索引器)紧密集成。
- 可以通过外部
Scope
将 Rust 值作为 变量/常量 传递到脚本中 - 支持所有可克隆的 Rust 类型;无需实现任何特殊 trait。或者直接访问 变量解析过程。 - 内置对大多数常见 数据类型 的支持,包括布尔值、整数、浮点数(包括
Decimal
)、字符串、Unicode 字符、数组(包括打包的 字节数组)和 对象映射。 - 轻松从 Rust 中调用脚本定义的函数。
- 相对较少的
unsafe
代码(是的,出于性能原因有一些)。 - 依赖项很少 - 目前仅包括
smallvec
、thin-vec
、num-traits
、once_cell
、ahash
、bitflags
和smartstring
。 - 可重入的脚本引擎可以通过
sync
功能使其Send + Sync
(可发送和同步)。 - 一次性编译为 AST 形式,以便进行重复评估。
- 脚本经过 优化(适用于基于模板的机器生成的脚本)。
- 通过由过程宏驱动的 插件 系统轻松开发自定义 API。
- 支持 函数重载 和 操作符重载。
- 通过 函数指针 进行动态分派,并额外支持 柯里化。
- 支持 闭包(匿名函数),可以捕获共享值。
- 提供一些对 面向对象编程 (OOP) 的语法支持。
- 使用动态可加载的 模块 组织代码库,可选地 覆盖解析过程。
- 通过 serde 支持序列化/反序列化(需要
serde
功能)。 - 通过排除不需要的语言 功能 来支持 最小化构建。
- 提供 调试 接口。
具有防护措施
- 不抛出恐慌 保证 - 任何恐慌都是错误。Rhai 订阅这样一个口号,即库永远不应该使宿主系统恐慌,并且代码就是这样编写的。
- 沙箱化 - 如果脚本引擎被声明为不可变,则除非 明确允许,否则不能修改包含的环境。
- 坚固耐用 - 保护免受恶意攻击(如 栈溢出、数据过大、脚本失控 等),这些可能来自不受信任的第三方用户空间脚本。
- 跟踪脚本评估 进度 并手动终止脚本运行。
- 通过 Miri。
对于那些真正想要自己的语言的人来说
示例
子目录scripts
包含示例Rhai脚本。
以下是在脚本语言中的标准斐波那契示例
// This Rhai script calculates the n-th Fibonacci number using a
// really dumb algorithm to test the speed of the scripting engine.
const TARGET = 28;
const REPEAT = 5;
const ANSWER = 317_811;
fn fib(n) {
if n < 2 {
n
} else {
fib(n-1) + fib(n-2)
}
}
print(`Running Fibonacci(${TARGET}) x ${REPEAT} times...`);
print("Ready... Go!");
let result;
let now = timestamp();
for n in 0..REPEAT {
result = fib(TARGET);
}
print(`Finished. Run time = ${now.elapsed} seconds.`);
print(`Fibonacci number #${TARGET} = ${result}`);
if result != ANSWER {
print(`The answer is WRONG! Should be ${ANSWER}!`);
}
项目网站
文档
有关Rhai脚本引擎和语言的详细信息,请参阅Rhai手册。
游乐场
提供了一个带有语法高亮编辑器的在线游乐场,由WebAssembly提供支持。
可以直接从编辑器中评估脚本。
许可证
以下任选其一
除非明确声明,否则任何有意提交以包含在本软件包中的贡献,如Apache-2.0许可证所述,应按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~1.5–5MB
~92K SLoC