1 个稳定版本

1.17.2 2024 年 2 月 14 日

#185嵌入式开发

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许可证中定义的,应按上述方式双许可,不附加任何额外条款或条件。

依赖项

约2.5-6MB
约108K SLoC