Files
Chili Palmer a6f005d023 OpenSpec: phase-2-bytecode-vm archiviert, Delta-Specs in Hauptspecs gesynct
- Neue Hauptspecs: bytecode-kompilat, vm-ausfuehrung,
  vm-fehlerbehandlung, konsolen-basisbibliothek
- Erweitert: sprach-frontend (Typisiertes HIR als Sema-Ausgabe),
  kompat-testkorpus (Laufzeitvergleich, Phase-2-Korpusabdeckung)
- Change nach openspec/changes/archive/2026-09-02-phase-2-bytecode-vm
  verschoben; openspec validate --all: 9/9

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 11:33:51 +02:00

122 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tasks — Phase 2: Bytecode und VM
## 1. Feindesign-Dokumentation (Eingangsaufgabe aus Phase 0)
- [x] 1.1 Zahlenkonvertierungs-Matrix (implizite Casts, Banker's Rounding,
Überlauf, `/` vs. `\`/`MOD`, logische Operatoren, CURRENCY, `^`-Regel,
SINGLE/DOUBLE-Textdarstellung) als Tabelle in docs/tbvm-design.md
schreiben; jede Zelle mit Fundstelle in der Original-Hilfe belegen,
unklare Zellen als `TODO verify` markieren — verifizierbar: Abschnitt
existiert, keine Zelle ohne Beleg oder TODO-Marke
- [x] 1.2 Opcode-Satz vollständig in docs/tbvm-design.md ausformulieren
(Gruppen, Encoding, Operanden) und `STOP`/`CONT`-Runner-Entscheidung
sowie Fehlerbehandlungs-Scoping (design.md D4D6) dort festhalten —
verifizierbar: „Offene Punkte"-Abschnitt in tbvm-design.md ist leer
## 2. Frontend: Typisiertes HIR
- [x] 2.1 HIR-Datenmodell in `tb-frontend` definieren (Slots, typisierte
Ausdrücke, explizite Konvertierungsknoten, Prozedur-/Modulstruktur,
Quellzeilen-Anker) — verifizierbar: `cargo check` und Doku-Kommentare
je Knotentyp
- [x] 2.2 Sema zum Lowering-Pass umbauen: `analyze_source` liefert
zusätzlich HIR; Konstantenfaltung, `DEFtype`, implizite
Konvertierungen materialisieren — verifizierbar: alle 33 bestehenden
Frontend-Tests bleiben grün
- [x] 2.3 HIR-Tests: diagnose-freie Korpusmodule liefern vollständiges HIR;
Konvertierungsknoten-Szenario (`d# = i% + 1.5`) als Unit-Test —
verifizierbar: neue Tests in `crates/tb-frontend/tests` grün
## 3. Bytecode und Serialisierung
- [x] 3.1 Opcode-Definitionen und Modulstruktur (Konstantenpool, Typtabelle,
modul-qualifizierte Prozedurtabelle, DATA-Segment, Zeilentabelle) in
`tb-vm::bytecode` implementieren — verifizierbar: Unit-Tests für
Encoding/Decoding einzelner Opcodes
- [x] 3.2 `.tbc`-Writer/Reader (Magic, Formatversion, Abschnittstabelle)
implementieren — verifizierbar: Roundtrip-Test (schreiben → laden →
identisch) und Ablehnungstest für unbekannte Formatversion
## 4. Codegenerator
- [x] 4.1 Ausdrucks-Codegen (Literale, Slots, Arithmetik, Vergleiche,
logische Operatoren, Konvertierungsknoten, String-Konkatenation) —
verifizierbar: Unit-Tests HIR-Ausdruck → erwartete Opcode-Folge
- [x] 4.2 Kontrollfluss-Codegen (`IF`, `SELECT CASE`, `FOR`, `DO`, `WHILE`,
`GOTO`/`GOSUB`/`ON GOTO`, `EXIT`, Labels/Zeilennummern) mit
Fixup-Listen für Vorwärtsziele — verifizierbar: Unit-Tests je
Konstrukt
- [x] 4.3 Prozedur-Codegen (SUB/FUNCTION/`DEF FN`, BYREF-/BYVAL-Argumente,
`STATIC`, Frames/Locals), `DIM`/Arrays/UDTs, `DATA`-Segment und
Zeilentabelle emittieren — verifizierbar: Unit-Tests und
`cargo test -p tb-vm` grün
## 5. Interpreter (TBVM)
- [x] 5.1 VM-Grundgerüst: Werte-Modell, Operandenstack, Frames,
`step()`-Schleife mit Tick-Flag-Wort an Anweisungsgrenzen —
verifizierbar: Ausdrucks-Programme laufen in Unit-Tests
- [x] 5.2 Kontrollfluss und `GOSUB`-Stack pro Frame inkl. Fehler 3
(„RETURN without GOSUB") — verifizierbar: kontrollfluss.bas läuft im
Capture-Host mit korrekter Ausgabe
- [x] 5.3 Prozeduraufrufe (BYREF-Rückwirkung, Klammer-BYVAL, `STATIC`,
Rekursion, `DEF FN` im Modulkontext) — verifizierbar: Unit-Tests der
Spec-Szenarien aus vm-ausfuehrung
- [x] 5.4 `DATA`/`READ`/`RESTORE` inkl. Fehler 4 und 13 — verifizierbar:
Unit-Tests der Spec-Szenarien
- [x] 5.5 Fehlerbehandlung: Handler-Zustand (modul-global + Frame-lokal),
Unwinding, `RESUME`-Varianten, `ERR`/`ERL`, `ERROR n`, Fehler im
Handler fatal — verifizierbar: alle Szenarien aus vm-fehlerbehandlung
als Tests grün
- [x] 5.6 Unterbrechbarkeit: Breakpoints auf (Modul, Zeile), Einzelschritt,
Variableninspektion im Halt, Abbruchwunsch — verifizierbar:
Unit-Tests treiben die VM per `step()` und prüfen Halt/Inspektion
- [x] 5.7 Programmende: `END`/`SYSTEM`/Programmende vs. `STOP` mit Meldung
und Exit-Code-Unterscheidung — verifizierbar: Runner-Test prüft
Exit-Codes und Meldung
## 6. Konsolen-Basisbibliothek (`tb-runtime`-Scheibe)
- [x] 6.1 `Host`-Trait definieren; Konsolen-Host und Capture-Host
implementieren — verifizierbar: Unit-Test zeichnet Ausgabe byte-genau
auf
- [x] 6.2 Builtin-Dispatch-Tabelle + `CALL_BUILTIN`-ABI (Argumente auf dem
Stack) in VM und Runtime verdrahten — verifizierbar: `LEN`-Aufruf
läuft über die Tabelle (Spec-Szenario)
- [x] 6.3 PRINT-Formatierung: Zahlendarstellung je Typ, Vorzeichenspalte,
nachgestelltes Leerzeichen, `;`/`,`-Semantik, 14-Zeichen-Druckzonen —
verifizierbar: printzahlen.bas und printzonen.bas byte-genau korrekt
- [x] 6.4 Korpus-Stringfunktionen (`LEN`, `LEFT$`, `RIGHT$`, `MID$`,
`INSTR`, `UCASE$`, `LCASE$`, `STRING$`, `SPACE$`, `CHR$`, `ASC`,
`STR$`, `VAL`) mit Randfällen des Vorbilds — verifizierbar:
strings.bas byte-genau korrekt plus Randfall-Unit-Tests
(`VAL`-Präfixlesen, `STR$`-Leerzeichen, `ASC("")` → Fehler 5)
## 7. CLI und Test-Harness
- [x] 7.1 `tbc run <datei.bas>`: kompilieren, `.tbc` in Memory ausführen,
Konsolen-Host; Diagnosen bei Compile-Fehler, Exit-Codes nach D6 —
verifizierbar: `tbc run tests/compat/hello.bas` druckt `Hallo, Welt!`
- [x] 7.2 Harness in `tests/`: alle `tests/compat/*.bas` kompilieren, im
Capture-Host ausführen, byte-genau gegen `.out` vergleichen; bei
Abweichung Datei/Zeile/Soll/Ist nennen — verifizierbar: `cargo test`
führt den kompletten Korpus aus
- [x] 7.3 Korpus erweitern: Konvertierungsmatrix-Programm, Fehlerbehandlung
(`ON ERROR`/`RESUME`/`ERR`/`ERL`), BYREF/BYVAL-Programm mit
dokumentierter Sollausgabe (Belege bzw. `TODO verify`-Konvention) —
verifizierbar: neue `.bas`/`.out`-Paare laufen im Harness grün
## 8. Benchmarks und Abschluss
- [x] 8.1 Compile-Budget-Harness früh aufsetzen: Generator für
~50k-Zeilen-Projekt + Criterion-Bench; Budgetvergleich (< 1 s Projekt,
< 50 ms Modul) — verifizierbar: `cargo bench` weist die Zeiten aus
- [x] 8.2 VM-Durchsatz-Benches (Schleifen, Strings); Ergebnisse und
Benchmark-Stand in docs/tbvm-design.md „Performance" festhalten —
verifizierbar: Abschnitt enthält Messwerte mit Datum
- [x] 8.3 Meilenstein-Verifikation und Doku-Abschluss: kompletter Korpus
grün via `cargo test`, docs/sprachreferenz.md um Phase-2-Festlegungen
ergänzt (Rundung, `STOP`-Verhalten), PLAN.md-Phase-2-Haken gesetzt —
verifizierbar: alle Checkboxen der Phase in PLAN.md abgehakt,
Testsuite grün