docs: ticket 05 (script-engine-research) aufloesen, ticket 13 graduieren
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 05 — Research: Script-Engine für Mod-Stufe (c)
|
||||
|
||||
Type: research
|
||||
Status: open
|
||||
Status: resolved
|
||||
Blocked by: —
|
||||
|
||||
## Question
|
||||
@@ -19,3 +19,33 @@ Fakten sammeln, keine Entscheidung treffen. Zu klären:
|
||||
- Reifegrad: Wartungsstand, Release-Frequenz, Größe des Ökosystems, Beispiele aus echten Spielen.
|
||||
|
||||
Ergebnis: Vergleichstabelle plus Empfehlung mit Begründung; die Entscheidung fällt der Mensch später.
|
||||
|
||||
## Answer
|
||||
|
||||
Vollständiger Bericht: [`research/05-script-engine.md`](../research/05-script-engine.md)
|
||||
(209 Zeilen, geprüft am 2026-08-11). **Empfehlung: Rhai** — begründet, nicht entschieden.
|
||||
|
||||
- **Fehlermeldungen**: Rhai liefert Zeile *und* Spalte plus Call-Chain. Passt direkt zur
|
||||
`Result`-Fehlerstrategie aus Ticket 04.
|
||||
- **Typ-Brücke**: `#[derive(CustomType)]`, nur `Clone` nötig — gegen `impl UserData` pro Feld bei mlua.
|
||||
- **Hot-Reload**: AST-Tausch bei überlebendem `Scope`.
|
||||
- **Build**: kein `cc`, kein `libc` im Baum. Gemessen 44 Dependencies und 45,5 s gegen 166/304 Deps und
|
||||
262 s/356 s bei den WASM-Kandidaten.
|
||||
- **Sandbox, der schärfste Einzelbefund**: Ein Lua-Script hat auf dieser Maschine unter `Lua::new()`
|
||||
**und** unter `StdLib::ALL_SAFE` per `io.open` eine echte Datei gelesen. `ALL_SAFE` ist `(1<<30)-1`
|
||||
und meint *speichersicher*, nicht *fähigkeitsbeschränkt*. Rhai hat Datei-, Netz- und Prozesszugriff
|
||||
gar nicht erst in der Standard-Engine. Beide brauchen Härtung, bei Rhai kostet ein vergessener
|
||||
Handgriff weniger. Rhais Defaults sind aber auch nicht harmlos: `FileModuleResolver` lädt `./*.rhai`
|
||||
von der Platte, `eval()` ist an, CPU- und Memory-Limits sind aus.
|
||||
- **Gegenseite, ehrlich**: Lua gewinnt bei der Vertrautheit deutlich (Factorio, GMod, WoW, Teardown,
|
||||
Noita, Don't Starve, Luanti, Dota 2). Ist das Ziel „möglichst viele fremde Mods" statt „gut moddbar
|
||||
für einen kleinen Kreis", kippt die Empfehlung.
|
||||
- **Rhai-Risiken**: Bus-Faktor 1; Unsoundness-Issue #894 offen seit 2024; Pflicht-Dependency
|
||||
`smartstring` seit 2026-08-10 unmaintained (RUSTSEC-2026-0249); VM-Rewrite im Gang.
|
||||
- **WASM scheidet für 1.0 aus** — nicht technisch (beste Sandbox), sondern wegen Compile-Pflicht für
|
||||
Modder, Fehlermeldungen ohne Quellzeile und Build-Overhead. Falls später doch: `wasmi`, nicht wasmtime.
|
||||
- **Nicht verifizierbar und so gekennzeichnet**: kein ausgeliefertes Spiel mit Rhai-Modding, kein
|
||||
Rust-Spiel mit mlua, kein kommerzielles Spiel mit WASM-Modding auffindbar.
|
||||
|
||||
**Folge für die Map**: Reden Scripts ausschließlich über das Effekt-Vokabular, ist die Engine-Wahl
|
||||
weit umkehrbarer als sie aussieht. Die Entscheidung selbst ist zu Ticket 13 graduiert und hängt an 01.
|
||||
|
||||
Reference in New Issue
Block a user