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.
|
||||
|
||||
29
.scratch/rustkeep-1.0/issues/13-script-engine-waehlen.md
Normal file
29
.scratch/rustkeep-1.0/issues/13-script-engine-waehlen.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# 13 — Script-Engine wählen und Sandbox härten
|
||||
|
||||
Type: grilling
|
||||
Status: open
|
||||
Blocked by: 01
|
||||
|
||||
## Question
|
||||
|
||||
Rhai oder mlua — und wie wird die gewählte Engine abgedichtet?
|
||||
|
||||
Ticket 05 hat die Fakten geliefert und Rhai empfohlen. Die Entscheidung steht noch aus, und sie hängt
|
||||
bewusst an 01: Reden Scripts ausschließlich über das Effekt-Vokabular, ist die Wahl später umkehrbar;
|
||||
reichen sie tiefer in den Game-State, ist sie es nicht. Zu klären:
|
||||
|
||||
- **Ist das Effekt-Vokabular die einzige Schnittstelle für Scripts?** Wenn ja, ist die Engine-Wahl eine
|
||||
Implementierungsentscheidung statt einer Architekturentscheidung.
|
||||
- **Zielgruppe**: „gut moddbar für einen kleinen Kreis" spricht für Rhai, „möglichst viele fremde Mods"
|
||||
für Lua. Das ist die Frage, an der die Empfehlung kippt.
|
||||
- **Vertraust du fremden Mods?** Bei feindlichen Mods ist Luau der einzige echte Sandbox — zum Preis
|
||||
einer C++17-Toolchain und eines Lua-*Dialekts*.
|
||||
- **Härtungs-Checkliste** für die gewählte Engine festlegen. Bei Rhai mindestens: `FileModuleResolver`
|
||||
abschalten, `eval()` deaktivieren, CPU- und Memory-Limits setzen. Bei mlua: niemals `Lua::new()`,
|
||||
sondern `new_with` mit ausgewählten Libs, `load`/`loadstring`/`dofile`/`require` entfernen,
|
||||
`ChunkMode::Text` erzwingen.
|
||||
- **Wie geht das Projekt mit den Rhai-Risiken um** — Bus-Faktor 1, Unsoundness-Issue #894 seit 2024,
|
||||
`smartstring` unmaintained (RUSTSEC-2026-0249)? Akzeptiert, beobachtet, oder Ausschlusskriterium?
|
||||
- **Wann fällt die Entscheidung endgültig** — jetzt, oder erst wenn Mod-Stufe (c) gebaut wird?
|
||||
|
||||
Ergebnis: gewählte Engine mit Begründung, Härtungs-Checkliste, und die Regel, was Scripts sehen dürfen.
|
||||
Reference in New Issue
Block a user