Leitbild und Performance-Anforderungen verankern

- README: Leitbild Re-Imagination (Stufe 1 originalgetreu, Stufe 2
  additive Anreicherung fuer CLI-/TUI-Tool-Entwicklung)
- PLAN: Leitplanken (Online-Doku als Primaerquelle, Performance als
  Anforderung: Instant-Compile, Projekt-Build in Sekunden, Executable
  ohne Toolchain), Stufe-2-Ideenspeicher, Benchmark-Aufgaben in Phase 2
- tbvm-design: Performance-Abschnitt (Single-Pass, inkrementell,
  typisierte Opcodes, Slot-Aufloesung zur Compilezeit, Messlatten)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-01 16:45:59 +02:00
parent 7e6fa6ea88
commit 1ce371b96b
3 changed files with 108 additions and 4 deletions

View File

@@ -78,6 +78,39 @@ Ressource an (Anhängen ans Binary + Fußzeile mit Offset/Magic; portabel für
alle drei Plattformen). Alternative — `include_bytes!` + Cargo-Build beim
Nutzer — verworfen: erfordert Rust-Toolchain beim Anwender.
## Performance
**Compiler (Instant-Compile, Anforderung siehe PLAN.md):**
- Single-Pass pro Modul: Lexen, Parsen und Codegen in einem Durchlauf;
Vorwärtsreferenzen (Prozeduren, Labels) über Fixup-Listen statt zweitem
Pass. Die Sprache ist dafür gemacht — das Vorbild kompilierte auf
1992er-Hardware gefühlt sofort.
- Modulweise inkrementell: `.BAS`/`.FRM` werden unabhängig zu Bytecode-
Einheiten übersetzt und beim Build nur zusammengebunden; die IDE
recompiliert nur geänderte Module (Hash über Quelltext).
- Keine Optimierungspasses. Erlaubt sind nur Gratis-Optimierungen im
Codegen (Konstantenfaltung im Ausdruck, Peephole beim Emit).
- Budget als Test verankern (Phase 2): Benchmark-Projekt (~50k Zeilen)
muss unter 1 s kompilieren (Release-Build der Toolchain, Referenzrechner);
einzelnes Modul < 50 ms.
**VM-Ausführung:**
- Alle Namen werden zur Compilezeit aufgelöst: Variablen/Parameter sind
Slot-Indizes, Prozeduren Tabellenindizes — zur Laufzeit keine
Hash-Lookups.
- Statische Typen des Dialekts ausnutzen: typisierte Opcodes
(`ADD_I16`, `ADD_F64`, `CONCAT` …) statt generischem Dispatch über
`Value`-Tags in heißen Pfaden.
- Dichte Opcodes, `match`-Dispatch in einer engen Schleife; Tick-Prüfung
(Events/Breakpoints) nur an Anweisungsgrenzen über ein einzelnes
Flag-Wort, nicht pro Opcode.
- Strings immutabel via `Rc<str>` (Kopien sind Pointer-Kopien);
Konstantenpool dedupliziert.
- Messlatte (Phase 2, Benchmarks in `benches/`): typische
Schleifen-/String-Lasten mindestens ~100× schneller als das Vorbild auf
Originalhardware; Richtwert grob Lua-Interpreter-Klasse, gemessen und
dokumentiert statt geraten.
## Offene Punkte
- Opcode-Satz konkret ausformulieren (mit Phase 2)