- Rustアプリケーションに簡単に組み込めるスクリプト言語および実行エンジン
- 外部スクリプトを通じて動的ロジックを追加したり、カスタムDSLを作成できるよう設計されている
- Rustとの高い互換性を持ち、性能・セキュリティ・拡張性をすべて考慮したアーキテクチャを提供
- Rust 1.66.0+ 以上のすべてのRust対応プラットフォーム(WASM、
no-std)で動作
- 文法は JavaScript + Rust に近い動的型付け言語
- 性能: 単一コア 2.6GHz Linux VMで100万回の反復実行に0.14秒
- ネイティブなRust統合: Rustの関数、型、getter/setter、メソッド、インデクサをサポート
- Rustの値は変数/定数としてスクリプトに渡せる(
Scope を使用)
- 主なデータ型をサポート: 真偽値、整数、浮動小数点、
Decimal、文字列、Unicode文字、配列、バイト配列、オブジェクトマップ
- Rhaiスクリプトで定義された関数をRustから呼び出し可能
- 依存関係を最小化(smallvec、thin-vec など少数のライブラリのみ使用)
- Re-entrant(再入可能)なエンジン:
sync により Send + Sync に対応
- ASTのコンパイルおよび最適化機能を提供
- プラグインシステムとマクロベースのAPI拡張をサポート
- 関数/演算子オーバーロード、関数ポインタ、カリー化、クロージャ、一部のOOPパターンをサポート
- モジュールシステムを提供し、コードベースを動的に構成可能
serde によるシリアライズ/デシリアライズをサポート(オプション)
- デバッグインターフェースを提供
セキュリティと安全性
- Don’t Panic保証: パニックが発生した場合はバグと見なされ、ホストシステムは安全
- サンドボックス実行: 明示的に許可されない限り外部環境を変更できない
- 悪意ある攻撃を防止: スタックオーバーフロー、過大なデータ、無限実行を遮断
- 実行の進行状況を追跡し、手動で終了可能
- Miri検査に合格済み
カスタム言語を作りたい人のために
- RhaiをDSLとして活用可能
- ループなど特定の言語機能を無効化可能
- キーワード/演算子の無効化および制限が可能
- ユーザー定義演算子および構文拡張が可能
追加資料
ライセンス
- Apache 2.0 または MIT を選択可能
- コントリビュートされたコードにはデフォルトでデュアルライセンスを適用
3件のコメント
スクリプト言語を探しているなら、are we game yet にリストが少しあります。
https://arewegameyet.rs/ecosystem/scripting/
そのリストにはありませんが、最近 GPT に聞いていて
kotoというスクリプト言語も見つけました。少しだけ見てやめてしまったのですが、これも良さそうでした。https://koto.dev/
検索しているうちに
rotoというものも見つけましたが、これはどんなものかまでは見ていません。ただ、作っているところには何となく見覚えがありました。https://github.com/NLnetLabs/roto
wasm playground の時間計測のサンプルがありますが、速くないですね?
スクリプト用途の言語なので、速くないのが普通でしょう。