83 lines
6.6 KiB
Markdown
83 lines
6.6 KiB
Markdown
# Implementierungsnachweis — 05.09.2026
|
||
|
||
Change: `ereigniszustellung-und-hostgrenzen`, Ausgangscommit `57d6386`.
|
||
Alle zwölf Implementierungs-/Abnahmetasks einschließlich der fünf
|
||
[Verifikationsbefunde](review.md) sind abgeschlossen. Die vier betroffenen
|
||
Hauptspezifikationen sind synchronisiert; der Change wurde am 05.09.2026 archiviert.
|
||
|
||
## Befunde und Umsetzung
|
||
|
||
| Befund / Tasks | Umsetzung | Ausführbarer Nachweis |
|
||
| --- | --- | --- |
|
||
| F04 / 1.1 | SIGNAL(1) und SIGNAL(2) werden im gemeinsamen RtState-Eingang gemeldet; nur ungetrapptes SIGINT wird Abbruch. Zusätzlich erkennt der Parser SIGNAL(n) ON/OFF/STOP. | VM-Test `beide_signale_werden_zugestellt_und_beginnen_in_quellreihenfolge` einschließlich ungültiger konstanter/dynamischer Kennungen; Runtime-Tests für STOP/OFF beider Quellen und SIGINT ohne Trap. |
|
||
| F05 / 1.1 | ON verbraucht die Taste; STOP merkt den Trap einmal und belässt die Eingabe auch nach erneutem ON lesbar. Die Markierung bleibt beim Dialogaufruf erhalten. | VM-Test `key_on_off_stop_gelten_fuer_alle_konsoleneingaben`: drei Zustände × INKEY$, INPUT, LINE INPUT, INPUT$. Runtime-Test mit drei STOP-Tasten; VM-Regression für verbleibende Dialogeingaben. |
|
||
| F06 / 1.2, 2.1 | Eine Eingabequeue für Tasten/Maus bis zur Annahme. Forms-Eingaben und ihre Handler werden geordnet verarbeitet; erster Handler-Statement-Eintritt geschützt, gleiche Forms-Prozedur nicht rekursiv zugestellt. | VM-Tests für aM, Ma, aMbTM einschließlich KEY-Trap; Fokusfolge LlGg; explizites DOEVENTS ergibt arbr; UNLOAD im eigenen Handler ergibt ur. |
|
||
| F07 / 2.1 | Gemeinsame Zustellung; separate Menüsperre in Traps ohne Änderung der ON/OFF/STOP-Zustände. Bereits wartende Forms-Timer bleiben gesperrt, Menübedienung kann fortfahren. | VM-Menütest über gewöhnliche Zuweisung, DOEVENTS, SLEEP und LINE INPUT: Zähler bleibt 1, nach Esc werden UEVENT und Forms-Timer nachgeholt, Ergebnis 111. |
|
||
| F08 / 2.2 | Host besitzt Zeit und Deadline-Warten; keine Instant-/Sleep-/Yield-Rückfallebene in der VM. Auch Forms-SLEEP, modales Warten und sichtbare Forms nach Programmende nutzen den Host. Zeitabfragen nur bei tatsächlichem Zeitbedarf. | Host, der jede unerwartete Uhrabfrage/Warteoperation ablehnt; eingefrorene Uhr über reale 10 ms mit zwei identischen Hostdeadlines; Forms-Timer beendet SLEEP 60 bei Hostzeit 100 ms. Bestehender klassischer SLEEP-/TIMER-Test. |
|
||
| F18 / 1.1 | BackTab wird als TAB mit SHIFT normalisiert, auch wenn crossterm kein separates SHIFT-Flag liefert. | Terminal-Mapper-Test `backtab_ist_tab_mit_shift_auch_ohne_modifier`; bestehende Forms-Tests für Rückwärtstab, übersprungene Controls und Access-Keys. |
|
||
| F20 / 2.3 | tb-ui ist standardmäßig terminalfrei; `terminal` aktiviert Backendmodule und optionale Dependencies. CLI aktiviert dieses Feature ausdrücklich. | Separater Workspace `tests/terminalfrei`: FRM laden/kompilieren, Forms ausführen, CaptureHost-Ausgabe KM prüfen. Normaler Dependency-Graph: 16 Pakete, keines davon crossterm, ratatui oder signal-hook. CLI-Kompilation und CLI-Prozesstests erfolgreich. |
|
||
| 3.1 | Zwei kleine geordnete Ereignisprogramme mit ausdrücklich festgelegten Ausgaben ergänzt. | `eingabe-taste-maus.frm` → KM; `eingabe-maus-taste.frm` → MK. Beide laufen zweimal im bestehenden Korpusharness. Keine bestehende .out-Datei verändert. |
|
||
| 3.2 | Zeit-, Zustell-, Eingabequeue- und Backend-Verträge einschließlich Einbetter-Migration dokumentiert. | [VM-Design](../../../../docs/tbvm-design.md#ausführungsmodell--unterbrechbarkeit), Checks und Benchmarks unten. |
|
||
|
||
Die neuen VM-Regressionen liegen in
|
||
[crates/tb-vm/tests/events.rs](../../../../crates/tb-vm/tests/events.rs).
|
||
Bestehende Trap-Rückkehr-, GOSUB-, Fehler-/RESUME-, BYREF- und Modalitätstests
|
||
wurden im vollständigen Workspace-Testlauf mit ausgeführt.
|
||
|
||
## Behebung der Verifikationsbefunde
|
||
|
||
V1–V5 sind geschlossen. Der [aktualisierte Report](review.md) ordnet jede
|
||
Korrektur den ursprünglichen Beobachtungen und ihren Regressionen zu.
|
||
Die 25 Tests in `events.rs` decken nun auch fortsetzbare Eingabe samt Teiltext,
|
||
Ausdrucksoperanden, BYREF, verschachtelten Handlern, STOP/CONT, Timer,
|
||
Fehler-Unwinding und RETURN label ab. Objektaufrufe bewahren die Fokusfolge,
|
||
Menüschluss gibt Traps sofort frei, beide Formularschleifen arbeiten Eingaben
|
||
vor EOF ab und die klassische KEY-/UEVENT-Priorität bleibt erhalten.
|
||
|
||
## Ausgeführte Prüfungen
|
||
|
||
- `cargo test --workspace`: **419 bestanden, 0 fehlgeschlagen, 1 ignoriert**.
|
||
Ignoriert bleibt ausschließlich `erzeuge_sollausgaben`; keine automatische
|
||
Neuaufzeichnung von Golden Files.
|
||
- Separater Treiber der ursprünglichen `review-probes.rs`: **6 bestanden, 0 fehlgeschlagen**.
|
||
- `cargo clippy -p tb-runtime -p tb-ui -p tb-vm -p tb-cli --all-targets --all-features -- -D warnings`: erfolgreich, ohne Warnungen.
|
||
- `cargo fmt --all -- --check` und Formatprüfung des separaten Einbetters: erfolgreich.
|
||
- `cargo run --manifest-path tests/terminalfrei/Cargo.toml --offline`: erfolgreich,
|
||
`Terminalfreier FRM-/VM-Lauf: KM`.
|
||
- `cargo tree --manifest-path tests/terminalfrei/Cargo.toml --offline --edges normal --prefix none --format '{p}'`:
|
||
mit expliziter Prüfung auf ausgeschlossene Terminalpakete, erfolgreich.
|
||
- `openspec validate ereigniszustellung-und-hostgrenzen --strict`: erfolgreich.
|
||
- `git diff --check`: erfolgreich.
|
||
|
||
## Release-Benchmarks
|
||
|
||
`cargo bench -p tb-vm --bench compile --bench vm`, auf diesem Rechner:
|
||
|
||
| Last | Ergebnis |
|
||
| --- | --- |
|
||
| Compile: 508 Zeilen | 0,83 ms, Budget 50 ms eingehalten |
|
||
| Compile: 49.760 Zeilen in 20 Modulen | 58 ms, Budget 1.000 ms eingehalten |
|
||
| INTEGER: 10 Mio. Iterationen | 1.048 ms, 9,5 Mio. Iterationen/s |
|
||
| DOUBLE: 5 Mio. Iterationen | 504 ms, 9,9 Mio. Iterationen/s |
|
||
| SUB/BYREF: 1 Mio. Aufrufe | 123 ms, 8,2 Mio. Aufrufe/s |
|
||
| String-Funktionen: 200.000 Runden | 99 ms, 2,0 Mio. Runden/s |
|
||
|
||
Der Compile-Projektbenchmark übersetzt 20 Module einzeln; er prüft keinen
|
||
Mehrmodul-Linker. Die VM-Zahlen sind lokale Durchsatzmessungen, keine
|
||
zugesicherte Performance auf anderer Hardware.
|
||
|
||
## Synchronisation und Archivierung
|
||
|
||
Neun bestehende Requirements in vier Hauptspezifikationen wurden um elf
|
||
Szenarien ergänzt; alle bisherigen Szenarien bleiben erhalten. Vollständiger
|
||
Abgleich aller Delta-Requirements erfolgreich; `openspec validate --specs
|
||
--strict`: 15 bestanden, 0 fehlgeschlagen.
|
||
|
||
## Grenzen
|
||
|
||
Terminaleingaben wurden über den Mapper und vorbereitete Hostereignisse
|
||
geprüft. Kein interaktiver Terminal-/Fremdprogrammvergleich und keine
|
||
Windows-/Linux-Ausführung. Der neue Vertrag verlangt von Einbettern eine
|
||
Implementierung von Host::warten; CaptureHost modelliert eine endliche
|
||
Ereignisquelle und explizites virtuelles Fortschreiten bis zur Deadline.
|