docs: ticket 05 (script-engine-research) aufloesen, ticket 13 graduieren

This commit is contained in:
2026-08-11 15:45:38 +02:00
parent 9f9279d926
commit c8cde87db1
4 changed files with 317 additions and 1 deletions

View File

@@ -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.