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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user