1 个稳定版本

1.4.0 2021 年 12 月 18 日

#696嵌入式开发

MIT/Apache

1.5MB
26K 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.51

标准功能

防止攻击

  • 不要恐慌 保证 - 任何恐慌都是错误。Rhai 订阅的座右铭是库永远不应该使宿主系统恐慌,并且以此为代码。
  • 沙盒化 - 脚本引擎,如果声明为不可变,则除非 明确允许,否则不能修改包含的环境。
  • 坚固耐用 - 防止恶意攻击(例如 栈溢出数据过大失控脚本 等),这些可能来自不可信的第三方用户空间脚本。
  • 跟踪脚本评估 进度 并手动终止脚本运行。

对于那些真正想要自己的语言的人来说

示例

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许可证定义的任何有意提交以包含在本软件包中的贡献,应如上双授权,不附加任何额外条款或条件。

依赖关系

~0.5–1.5MB
~33K SLoC