Zwei neue Capabilities in den Hauptspecs: - datei-eio: Dateiverwaltung, drei Zugriffsarten, UTF-32-Festtextfelder, Recordkonvertierung, Sperren, Dateisystem-Anweisungen - sprachinventar: das Vollstaendigkeits-Inventar als pruefbares Artefakt Fortgeschrieben: textbildschirm (Doppelzellen, Groessenunabhaengigkeit, Bildschirmanweisungen), konsolen-basisbibliothek (Host-Neuschnitt, volle String-/Format-/Datums-/Finanzbibliothek), kompat-testkorpus (Snapshot-Vergleich, Nachweis der Groessenunabhaengigkeit), sprach-frontend (Signaturpflicht, ON-ERROR-Scoping, DATA-Rohtext). Bilanz: +32 Anforderungen, 6 geaendert, 1 ersetzt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
10 KiB
Phase 3 (Kern) — Laufzeitbibliothek, Bildschirm und Datei-E/A
Why
Phase 2 hat eine lauffähige VM geliefert, aber nur eine dünne
Bibliotheksscheibe: rund 50 dokumentierte Anweisungen und Funktionen sind
im Frontend zwar typgeprüft, senken aber auf HStmtKind::Unsupported/
HExpr::Unsupported ab und enden zur Laufzeit in Fehler 73. Betroffen
sind alle Bildschirmanweisungen (CLS, LOCATE, COLOR, VIEW PRINT,
CSRLIN, POS, INKEY$), die komplette Datei-E/A, PRINT USING,
die Datums-/Zeitfunktionen und die System-Anweisungen. Klassische
Konsolenprogramme des Vorbilds laufen damit nicht.
Zusätzlich fehlt das Messinstrument: die Leitplanke „Vollständigkeit ist
das Soll" fordert ein Inventar aller Anweisungen/Funktionen mit
Abdeckungsstatus als Abnahmekriterium für Phase 6 — bislang existiert nur
die Implementierungsseite (die Unsupported-Marker), nicht die Sollseite
aus der Original-Hilfe.
Dieser Change löst den Plan-Meilenstein „klassische Konsolenprogramme
laufen unverändert" ein. ISAM ist als eigener Change phase-3-isam
ausgegliedert und schließt Phase 3 ab.
What Changes
- Vollständigkeits-Inventar (
docs/inventar.md): Tabelle aller Anweisungen, Funktionen und Metabefehle des Vorbilds aus der Original-Hilfe mit Statusimplementiert/offen/Non-Featureund Fundstelle. Ein automatischer Test gleicht die Tabelle gegenbuiltin_fn/builtin_stmtund dieUnsupported-Marker im Code ab; Divergenz schlägt fehl. Damit misst sich die Abdeckung selbst. - Bildschirmpuffer wandert nach
tb-runtime(Entscheidung 2026-09-03, Explore-Session):Cell/TextScreenmit der kompletten Bildschirmsemantik (Cursor, Farbattribute, Scrollen,VIEW PRINT,resize) ziehen ratatui-frei vontb-ui::screennachtb-runtime::screen. Intb-uibleiben nur die Ratatui-Anbindung (basic_color,impl Widget) und künftig der Terminal-Adapter. Begründung:PRINT,LOCATE,CLSundSCREEN()sind Elemente der Laufzeitbibliothek und müssen den Puffer erreichen; zugleich bleibentb-vmundtb-runtimedamit frei von einer Terminal-Abhängigkeit, sodass jedes Bildschirmverhalten ohne Terminal prüfbar ist. Die Forms-Engine bleibt laut PLAN.md intb-ui::forms(Entscheidung 2026-09-03) und zeichnet von dort in denselben Puffer —tb-uihängt künftig antb-runtime, nicht umgekehrt. - BREAKING:
Host-Trait neu geschnitten: stattwrite(&str)/read_line()künftig Präsentation eines Zellenpuffers und Ereignisabfrage.write/read_linekönnen den Bildschirmzustand nicht transportieren (LOCATE,COLOR,CSRLIN,SCREEN(r,c)liest vom Bildschirm zurück). BetrifftConsoleHost,CaptureHostundtbc run. - BREAKING: Korpusvergleich auf Bildschirm-Snapshot (getrimmt):
.out-Dateien halten künftig das Textbild des Puffers bis zur letzten belegten Zelle statt eines Byte-Streams; eine Attributebene kommt nur hinzu, wenn das ProgrammCOLORverwendet. Die acht bestehenden Golden Files werden neu erzeugt. Ein Byte-Stream kannLOCATE/COLORnicht abbilden. - Bildschirmanweisungen und -funktionen:
CLS,COLOR,LOCATE,WIDTH,SCREEN(Anweisung und Funktion),VIEW PRINT,CSRLIN,POS,INKEY$,INPUT$,TAB,SPC,KEY(inkl. Klärung des Umfangs der Funktionstasten-MakrosKEY LIST/ON/OFF). - 80×25 ist nirgends eine feste Grenze (Vorgabe des Projektinhabers
2026-09-03, Priorität für das ganze Programm): 80×25 steht stets als
Synonym für „voller Bildschirm". Kein beobachtbares Verhalten darf eine
feste Spalten- oder Zeilenzahl voraussetzen —
CLS, der voreingestellte Scrollbereich, Umbruch- und Scrollgrenzen sowie die Bereichsprüfungen vonLOCATEundSCREEN()folgen den aktuellen Abmessungen. Größenänderungen während der Ausführung werden als Ereignis zugestellt und angepasst (Inhalt oben links erhalten, Cursor undVIEW PRINT-Bereich geklemmt). Das Mindestmaß 80×25 bleibt ausschließlich eine untere Schranke der Darstellung. - Breite Unicode-Zeichen belegen zwei Zellen (Entscheidung
2026-09-02): Zellenmodell, Cursorfortschritt,
POS/LOCATEund Umbruch am rechten Rand berücksichtigen die Darstellungsbreite (unicode-width). Ersetzt die bisherige Regel „1 Zeichen = 1 Zelle". - Vollständige String- und Zahlenbibliothek: die restlichen
dokumentierten Stringfunktionen sowie
PRINT USINGundFORMAT$vollständig, inklusive Klärung des%-Präfixes bei Feldüberlauf. - Datums- und Zeitfunktionen:
NOW,DATESERIAL,TIMESERIAL,DATEVALUE,TIMEVALUE,DAY,MONTH,YEAR,WEEKDAY,HOUR,MINUTE,SECONDsowieDATE$/TIME$als Anweisungsform. - Finanzmathematik (Befund aus Aufgabe 1.1, 2026-09-03 — im
ursprünglichen Umfang übersehen):
FV#,PV#,Pmt#,IPmt#,PPmt#,NPer#,Rate#,NPV#,IRR#,MIRR#,SLN#,SYD#,DDB#. - Record-Konvertierungsfunktionen (ebenfalls Befund 1.1):
MKI$/MKL$/MKS$/MKD$/MKC$undCVI/CVL/CVS/CVD/CVCsowie die MBF-VariantenMKSMBF$/MKDMBF$/CVSMBF/CVDMBF— sie gehören zumFIELD-basierten wahlfreien Zugriff. - Weitere Befunde aus 1.1:
CURDIR$,DIR$,CHDRIVE,SHELLals Funktion,LPOS,STACK(Anweisung und Funktion),SYSTEM,ERDEV/ERDEV$,SetFormatCC. - Signaturen für alle Inventarelemente: Die Semantik führt für jedes im Inventar geführte Element eine Signatur, auch wenn das Laufzeitverhalten noch aussteht — sonst enden dokumentierte Elemente in „unbekannter Bezeichner" statt in einer namentlichen Ablehnung.
- Mathematik vervollständigen: kompatibler
RND/RANDOMIZE-PRNG (gleiche Zahlenfolge wie das Vorbild bei gleichem Startwert), Rundungsverhalten, Integer-Überlauf → Fehler 6. - Datei-E/A:
OPENin beiden Syntaxen (sequenziell, random, binär),CLOSE,RESET,PRINT #,WRITE #,INPUT #,LINE INPUT #,GET,PUT,FIELD,LSET,RSET,SEEK(Anweisung und Funktion),EOF,LOF,LOC,FREEFILE,FILEATTR,LOCK/UNLOCK,NAME … AS,LPRINT. Feste Strings in Records als UTF-32 (Entscheidung 2026-09-02, 4 Bytes/Zeichen, feste Recordlänge). - System-Anweisungen:
FILES,KILL,CHDIR,MKDIR,RMDIR,SHELL,ENVIRON/ENVIRON$,CLEAR,FRE,TRON/TROFF, plattformübergreifende Pfadsemantik. - Drei Altlasten aus Phase 2:
ON ERROR GOTO-Scoping: ein Handler-Label auf Modulebene ist auch aus Prozeduren heraus ansprechbar; heute wird nicht-lokalesON ERRORin einer Prozedur fälschlich wieON LOCAL ERRORbehandelt (sema.rs,lower_stmt/OnError).- DATA-Rohtext: unquotierte
DATA-Elemente verlieren die Groß-/ Kleinschreibung, weil der Lexer Bezeichner normalisiert. TODO verify-Zellen der Konvertierungsmatrix indocs/tbvm-design.mdgegen die Original-Hilfe auflösen (CURRENCY-Promotion mit Gleitkomma,^-Ergebnistyp, Exponentialform-Schwellen, CURRENCY-Ausgabeformat).
Non-Goals: ISAM (eigener Change phase-3-isam, schließt Phase 3 ab);
Forms-Engine, Ereignisschleife und Ereignissteuerung (TIMER/KEY(n) ON| OFF|STOP, ON SIGNAL/SIGNAL, SETUEVENT, MSGBOX, INPUTBOX$ —
Phase 4); IDE und
Debugger (Phase 5); tbc build --exe (Phase 6). Die Forms-Engine bleibt
laut PLAN.md in tb-ui::forms (Entscheidung 2026-09-03); dieser Change
schafft ihr mit dem Puffer in tb-runtime nur die Zeichenfläche.
Capabilities
New Capabilities
datei-eio: Dateiverwaltung und Datenübertragung —OPEN/CLOSE, die drei Zugriffsarten (sequenziell, random, binär), Record-Layout mit UTF-32-Festtextfeldern,FIELD/LSET/RSET, Positions- und Statusfunktionen (EOF/LOF/LOC/SEEK/FREEFILE/FILEATTR), Sperren, Dateisystem-Anweisungen und plattformübergreifende Pfadsemantik.sprachinventar: das Vollständigkeits-Inventar als prüfbares Artefakt — Aufbau der Tabelle, Statusvokabular, Pflicht zur Vollständigkeit gegenüber der Original-Hilfe und der automatische Abgleich gegen den Code.
Modified Capabilities
textbildschirm: Der Zellenpuffer SHALL intb-runtimeliegen und ratatui-frei sein; das Unicode-Zellenmodell wechselt von „1 Zeichen = 1 Zelle" auf Darstellungsbreite (breite Zeichen belegen zwei Zellen); neue Anforderung für die Bildschirmanweisungen des Dialekts auf dem Puffer.konsolen-basisbibliothek: DerHost-Trait wechselt vom Stream- auf ein Bildschirmmodell (Präsentation + Ereignisabfrage); die Funktionsliste wird von der Korpusscheibe auf die vollständige String-, Zahlen-, Formatierungs- (PRINT USING) und Datums-/ Zeitbibliothek erweitert;RNDerhält eine Kompatibilitätsanforderung.kompat-testkorpus: Der Laufzeitvergleich wechselt vom Byte-Stream auf einen getrimmten Bildschirm-Snapshot; neue Abdeckungsanforderung für Bildschirm-, Formatierungs- und Datei-E/A-Semantik.sprach-frontend:ON ERROR GOTOauf Modulebene SHALL aus Prozeduren heraus ansprechbar sein (bisher fälschlich lokal); unquotierteDATA-Elemente SHALL ihren Rohtext behalten.
Impact
crates/tb-ui:screen.rsverliert Puffer und Semantik antb-runtime; zurück bleibenbasic_colorundimpl Widgetals Adapter auf den Runtime-Puffer. Neue Abhängigkeittb-runtime(bisher waren beide Blätter im Abhängigkeitsgraphen);forms.rsbleibt als Platzhalter für Phase 4 unberührt.crates/tb-runtime: neuesscreen-Modul;host.rsneu geschnitten (BREAKING);strings,format,math,datetime,fileio,builtinsvon Stub/Scheibe auf Vollimplementierung; neue Abhängigkeitunicode-width.crates/tb-frontend: rund 50Unsupported-Marker weichen echter Absenkung; rund 30 bislang signaturlose Elemente (Finanzmathematik,MK…$/CV…,CURDIR$,DIR$,CHDRIVE,LPOS,STACK,SYSTEM,ERDEV/ERDEV$,SetFormatCC) erhalten Signaturen;sema.rs(ON ERROR-Scoping),lexer.rs(DATA-Rohtext).crates/tb-vm: neue Builtin-Indizes;Instr::Unsupportedbleibt für die verbleibenden Phase-4-Marker bestehen.crates/tb-cli:tbc runauf den neuenHost; Harness auf Snapshot-Vergleich (BREAKING für die acht bestehenden.out).tests/compat: acht Golden Files neu erzeugt, neue Korpusdateien für Bildschirm,PRINT USING, Datei-E/A, Datum/Zeit, breite Zeichen.docs/: neudocs/inventar.mdunddocs/bibliothek.md; fortgeschriebendocs/sprachreferenz.md(Doppelzellen,KEY n,PRINT USING-Überlauf) unddocs/tbvm-design.md(Konvertierungsmatrix). PLAN.md-Haken folgen bei Abschluss.