- Skriptsprache und Ausführungs-Engine, die sich einfach in Rust-Anwendungen einbetten lässt
- Entwickelt, um über externe Skripte dynamische Logik hinzuzufügen oder ein benutzerdefiniertes DSL zu erstellen
- Hohe Kompatibilität mit Rust und eine Architektur, die Performance, Sicherheit und Erweiterbarkeit gleichermaßen berücksichtigt
- Läuft auf allen von Rust unterstützten Plattformen ab Rust 1.66.0+ (WASM,
no-std)
- Die Syntax ist eine dynamisch typisierte Sprache, ähnlich wie JavaScript + Rust
- Performance: 0,14 Sekunden für 1 Million Iterationen auf einer Single-Core-2,6-GHz-Linux-VM
- Native Rust-Integration: Unterstützung für Rust-Funktionen, -Typen, Getter/Setter, Methoden und Indexer
- Rust-Werte können als Variablen/Konstanten an Skripte übergeben werden (mit
Scope)
- Unterstützung für wichtige Datentypen: Boolesche Werte, Ganzzahlen, Gleitkommazahlen,
Decimal, Strings, Unicode-Zeichen, Arrays, Byte-Arrays, Objekt-Maps
- In Rhai-Skripten definierte Funktionen können von Rust aus aufgerufen werden
- Minimale Abhängigkeiten (nur wenige Bibliotheken wie smallvec, thin-vec usw.)
- Re-entrant-fähige Engine: über
sync ist Send + Sync möglich
- Bietet AST-Kompilierung und -Optimierung
- Unterstützung für ein Plugin-System und makrobasiere API-Erweiterungen
- Unterstützt Funktions-/Operator-Overloading, Funktionszeiger, Currying, Closures und teilweise OOP-Muster
- Bietet ein Modulsystem, mit dem sich die Codebasis dynamisch zusammensetzen lässt
- Optionale Unterstützung für
serde-Serialisierung/-Deserialisierung
- Bietet eine Debugging-Schnittstelle
Sicherheit und Safety
- Don’t-Panic-Garantie: Tritt ein Panic auf, gilt dies als Bug; das Host-System bleibt sicher
- Sandbox-Ausführung: Änderungen an der externen Umgebung sind nicht möglich, sofern sie nicht ausdrücklich erlaubt werden
- Schutz vor bösartigen Angriffen: Stack Overflow, übermäßige Datenmengen und Endlosschleifen werden blockiert
- Der Fortschritt der Ausführung kann verfolgt und manuell beendet werden
- Miri-Prüfung erfolgreich bestanden
Für alle, die eine eigene Sprache entwickeln möchten
- Rhai kann als DSL verwendet werden
- Bestimmte Sprachfunktionen wie Schleifen können deaktiviert werden
- Keywords/Operatoren können deaktiviert und eingeschränkt werden
- Benutzerdefinierte Operatoren und Syntaxerweiterungen sind möglich
Weitere Materialien
Lizenz
- Wahlweise Apache 2.0 oder MIT
- Eingebrachter Code wird standardmäßig unter einer Dual-Lizenz veröffentlicht
3 Kommentare
Wenn Sie nach einer Skriptsprache suchen, gibt es auf are we game yet eine kleine Liste.
https://arewegameyet.rs/ecosystem/scripting/
Steht nicht auf dieser Liste, aber als ich neulich GPT gefragt habe, habe ich auch eine Skriptsprache namens koto entdeckt. Ich habe sie nur kurz angeschaut und es dann dabei belassen, aber sie sah auch ziemlich gut aus.
https://koto.dev/
Beim Suchen bin ich außerdem auf etwas namens roto gestoßen. Ich habe mir nicht genauer angesehen, was das ist, aber der Name der Organisation dahinter kam mir irgendwie bekannt vor.
https://github.com/NLnetLabs/roto
Es gibt Beispiele zur Zeitmessung im wasm-Playground, aber die sind nicht schnell, oder?
Da es sich um eine Sprache für Skripting-Zwecke handelt, ist es wohl normal, dass sie nicht schnell ist.