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嵌入式开发 中排名

Download history 21807/week @ 2024-05-03 24935/week @ 2024-05-10 21572/week @ 2024-05-17 20006/week @ 2024-05-24 23093/week @ 2024-05-31 21386/week @ 2024-06-07 22648/week @ 2024-06-14 22005/week @ 2024-06-21 19709/week @ 2024-06-28 23361/week @ 2024-07-05 23213/week @ 2024-07-12 24597/week @ 2024-07-19 23901/week @ 2024-07-26 24864/week @ 2024-08-02 23538/week @ 2024-08-09 18160/week @ 2024-08-16

每月下载量 94,435
用于 161 个软件包 (99 个直接使用)

MIT/Apache 许可协议

2MB
36K SLoC

Rhai - 用于 Rust 的嵌入式脚本语言

GitHub last commit Build Status Stars License crates.io crates.io API Docs VS Code plugin installs Sublime Text package downloads Discord Chat Zulip Chat Reddit Channel

Rhai logo

Rhai 是一个嵌入式脚本语言和评估引擎,用于 Rust,它为将脚本添加到任何应用程序提供了一种安全且简单的方法。

目标和构建

  • 支持 Rust 所有的 CPU 和操作系统目标,包括
    • WebAssembly (WASM)
    • no-std
  • 最低 Rust 版本 1.66.0

标准功能

具有防护措施

  • 不抛出恐慌 保证 - 任何恐慌都是错误。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.rs

文档

有关Rhai脚本引擎和语言的详细信息,请参阅Rhai手册

游乐场

提供了一个带有语法高亮编辑器的在线游乐场,由WebAssembly提供支持。

可以直接从编辑器中评估脚本。

许可证

以下任选其一

除非明确声明,否则任何有意提交以包含在本软件包中的贡献,如Apache-2.0许可证所述,应按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~1.5–5MB
~92K SLoC