Setzt den OpenSpec-Change phase-3-runtime-bildschirm um (77/77 Aufgaben). Abdeckung laut Inventar: 195 implementiert, 37 offen, 53 Non-Feature. Vollstaendigkeits-Inventar - docs/inventar.md mit 285 Eintraegen aus den Themenlisten von bas7advr.hlp und qb45advr.hlp, je mit Status und Fundstelle - crates/tb-frontend/tests/inventar.rs haelt die Tabelle in beide Richtungen gegen den Code; der Abdeckungsstand kann nicht veralten Bruchschritt (Puffer, Host, Korpus) - Cell/TextScreen ziehen ratatui-frei nach tb-runtime::screen; tb-ui behaelt Farbabbildung, Widget und den neuen Terminal-Host - Host wechselt vom Zeichenstrom auf Anzeige des Zellenpuffers plus Ereignisse (Taste, Groessenaenderung, Abbruch) - Korpusvergleich auf getrimmten Bildschirm-Snapshot; die acht bestehenden Sollausgaben blieben dabei unveraendert Groessenunabhaengigkeit - 80x25 ist nirgends mehr eine feste Grenze; Groessenaenderungen waehrend der Ausfuehrung werden zugestellt (Inhalt oben links erhalten, Cursor und VIEW PRINT geklemmt) - Korpusnachweis: dasselbe Programm bei 80x25 und 120x40 mit je eigener Sollausgabe, plus ein Programm mit Groessenwechsel mitten im Lauf Bibliothek - Breite Unicode-Zeichen belegen zwei Zellen (Cursor, POS, Randumbruch) - Bildschirm: CLS, COLOR, LOCATE, WIDTH, VIEW PRINT, SCREEN, CSRLIN, POS - Tastatur: INKEY$, INPUT$, Funktionstasten-Makros (KEY n / LIST / ON) - PRINT USING, LPRINT USING, FORMAT$, SetFormatCC - Mathematik mit kompatiblem PRNG (gleiche Saat, gleiche Folge) - Datum und Zeit mit Serienwerten ab 1899 - Finanzmathematik: FV#, PV#, Pmt#, IPmt#, PPmt#, NPer#, Rate#, NPV#, IRR#, MIRR#, SLN#, SYD#, DDB# - Datei-E/A: sequenziell, RANDOM (Recordpuffer und UDT-Variablen), BINARY, FIELD/LSET/RSET, Statusfunktionen, Dateisystem, MK$/CV - System: ENVIRON, FRE, CLEAR, TRON/TROFF, STACK, ERDEV, ERR-Anweisung Altlasten aus Phase 2 - ON ERROR GOTO auf Modulebene ist aus Prozeduren ansprechbar (prozeduruebergreifender Fixup im Codegenerator) - DATA behaelt seinen Rohtext (Gross-/Kleinschreibung, innerer Leerraum) - Die vier TODO-verify-Zellen der Konvertierungsmatrix sind aufgeloest Vom Inventar aufgedeckte Fehler - Zwoelf Non-Features wies der Compiler entgegen der Phase-1-Spec nicht ab (CALLS, SSEG, POINT, VIEW, COM, PEN, STRIG, STICK, die String*-Routinen, LINE und OPEN "COMn:") -- geschlossen - Drei Gruppen fehlten im urspruenglichen Umfang: Finanzmathematik, Record-Konvertierung, Rest der Dateisystemfunktionen - bas7advr.hlp allein ist keine vollstaendige Quelle; das Inventar bildet die Vereinigung mit qb45advr.hlp Neue Changes - phase-3-isam: schliesst Phase 3 ab (Speicherschicht redb) - phase-3-ortszeit: zieht die UTC-Abweichung zurueck Neue Abhaengigkeit: unicode-width. Dokumentiert: sprachreferenz.md und tbvm-design.md sind TODO-frei, docs/bibliothek.md neu, PLAN.md fortgeschrieben. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.1 KiB
4.1 KiB
1. Versatzermittlung
- 1.1
jiffals Workspace-Abhängigkeit aufnehmen und intb-runtimeeinbinden; verifiziert dadurch, dasscargo build -p tb-runtimedurchläuft undcargo tree -p tb-runtimedie Bibliothek genau einmal zeigt - 1.2
datetime::utc_versatz(zeitpunkt: i64) -> Option<i32>als einzigen Aufrufpunkt der Bibliothek schreiben (Sekunden Versatz,None= Zone nicht ermittelbar); verifiziert durch Unit-Test, dass der Versatz für einen festen Zeitpunkt im gültigen Bereich −50400…50400 liegt - 1.3 Sommerzeit prüfen: für dieselbe Zone einen Zeitpunkt im Januar und einen im Juli abfragen; verifiziert durch Unit-Test, dass sich die Versätze in einer Zone mit Sommerzeit unterscheiden und in einer ohne gleich bleiben
- 1.4 Sicherstellen, dass die Kalenderrechnung unberührt bleibt; verifiziert dadurch, dass
datetime.rsaußerhalb vonutc_versatzkeinen Bibliotheksaufruf enthält und die bestehendendatetime-Tests unverändert grün sind
2. Zonenzustand in der Laufzeit
- 2.1
Zeitzone { System, Fest(i32), Unbekannt }einführen und inRtStatehalten; VorgabeSystem, bei fehlgeschlagener ErmittlungUnbekannt; verifiziert durch Unit-Test je Variante - 2.2
jetzt_sekunden/jetzt_serialauf den Zonenzustand umstellen; verifiziert durch Unit-Test, dassFest(3600)genau eine Stunde gegenüberUnbekanntverschiebt - 2.3
DATE$,TIME$,TIMERundNOWüber den Zonenzustand rechnen; verifiziert durch Test, dassHOUR(NOW)und die Stunde ausTIME$beiFest(n)übereinstimmen - 2.4
TIMERzählt ab lokaler Mitternacht; verifiziert durch Test, dass sichTIMERbeiFest(3600)gegenüberUnbekanntum 3600 verschiebt (modulo Tageslänge) - 2.5
DATE$ =/TIME$ =wirken auf die Ortszeit; verifiziert durch Test, dassTIME$nachTIME$ = "10:20:30"genau diesen Wert nennt undHOUR(NOW)10 liefert
3. Rückfallebene
- 3.1 Bei nicht ermittelbarer Zone auf UTC zurückfallen, ohne Fehler; verifiziert durch Test mit
Zeitzone::Unbekannt, dass alle Zeitfunktionen Werte liefern - 3.2 Den Rückfall beim Programmstart einmalig auf die Fehlerausgabe melden (nicht je Abfrage); verifiziert dadurch, dass
tbc runbeiUnbekanntgenau eine Meldung schreibt und die Standardausgabe unberührt bleibt - 3.3 Rückfallebene in docs/sprachreferenz.md beschreiben; verifiziert durch den Abschnittseintrag
4. Prüfbarkeit ohne Abhängigkeit von der Testmaschine
- 4.1 Kopfzeilen-Direktive
' tb-tz: ±HH:MMim Korpus-Harness auswerten und alsZeitzone::Festsetzen; verifiziert dadurch, dass ein Korpusprogramm ohne die Direktive weiterhin läuft und eines mit ihr den gesetzten Versatz verwendet - 4.2 Korpusprogramm
zeitzone.basmit festem Versatz:DATE$/TIME$/TIMER/NOWgegen eine perDATE$ =/TIME$ =gesetzte Uhrzeit prüfen; verifiziert dadurch, dass die Sollausgabe unabhängig von der Zone des Testrechners stimmt - 4.3 Bestehendes
datumzeit.basauf die Direktive umstellen, damit es auch nach der Umstellung deterministisch bleibt; verifiziert dadurch, dass seine Sollausgabe unverändert bleibt
5. Abschluss
- 5.1 Abweichung „Uhr läuft in UTC" aus docs/sprachreferenz.md entfernen und durch die Beschreibung der Zonenermittlung ersetzen; verifiziert dadurch, dass der Abweichungspunkt nicht mehr auftaucht
- 5.2
docs/bibliothek.md, Abschnitt Datum/Zeit, fortschreiben; verifiziert durch den geänderten Abschnitt - 5.3 PLAN.md Stufe 2, Eintrag „Runtime-Bibliotheken als BASIC-Bibliotheken", um die Zeitzonenbibliothek erweitern (Zonennamen, Versatz zu einem Zeitpunkt, Umrechnung zwischen Zonen) — neben crossterm; verifiziert durch den ergänzten Eintrag
- 5.4 PLAN.md Phase 3: den Hinweis auf die UTC-Abweichung durch den Verweis auf diesen Change ersetzen; verifiziert durch den aktualisierten Abschnitt
- 5.5 Inventar unverändert lassen und den Abgleichstest prüfen; verifiziert dadurch, dass
cargo test -p tb-frontend --test inventargrün bleibt (die Elemente waren bereits implementiert, nur ihr Zeitbezug ändert sich) - 5.6 Vollständige Suite ausführen; verifiziert dadurch, dass
cargo test --workspacegrün ist