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

3.0 KiB

Purpose

Die Konsolen-Basisbibliothek ist die in Phase 2 vorgezogene Scheibe der Laufzeitbibliothek: die Builtin-Aufrufschnittstelle der VM, ein Host-Abstraktion für Konsolen-E/A sowie PRINT-Formatierung und die vom Testkorpus benötigten Stringfunktionen.

ADDED Requirements

Requirement: Builtin-Aufrufschnittstelle

Die VM SHALL Bibliotheksfunktionen und -anweisungen über eine indizierte Dispatch-Tabelle aufrufen (Argumente auf dem Operandenstack, Index im Opcode); die Tabelle lebt in der Laufzeitbibliothek und ist ohne Änderung am Opcode-Satz erweiterbar (Phase 3 füllt sie auf).

Scenario: Builtin über Tabelle

  • WHEN PRINT LEN("abc") ausgeführt wird
  • THEN wird LEN über seinen Tabellenindex aufgerufen und liefert 3

Requirement: Host-Abstraktion für Konsolen-E/A

Alle Konsolenwirkungen der VM SHALL über eine austauschbare Host-Schnittstelle laufen (Textausgabe, zeilenweises Lesen für INPUT, Abbruchprüfung). Host-Aufrufe dürfen blockieren; die Abbruchprüfung (Strg+Untbr) obliegt dem Host. tbc run verwendet einen Konsolen-Host (stdout/stdin); Tests MUST einen Capture-Host verwenden können, der die Ausgabe byte-genau aufzeichnet.

Scenario: Capture-Host im Test

  • WHEN ein Korpusprogramm im Test-Harness läuft
  • THEN entsteht die komplette Ausgabe im Capture-Host und ist byte-genau vergleichbar

Requirement: PRINT-Formatierung

PRINT SHALL Zahlen im Format des Vorbilds ausgeben: führendes Leerzeichen für nicht-negative bzw. - für negative Werte, nachgestelltes Leerzeichen (auch am Zeilenende); Zahlendarstellung je Typ wie beim Vorbild (u. a. kein Dezimalpunkt bei ganzzahligen Werten, signifikante Stellen je nach SINGLE/DOUBLE). ; schließt direkt an, , springt zur nächsten 14-Zeichen-Druckzone (belegt ein Element die Zone ganz, zur übernächsten); ohne abschließendes ;/, folgt ein Zeilenumbruch.

Scenario: Zahlen mit Vorzeichenspalte

  • WHEN PRINT 1; -2; 3.5 ausgeführt wird
  • THEN lautet die Ausgabe 1 -2 3.5 mit Zeilenumbruch

Scenario: Druckzonen

  • WHEN PRINT "12345678901234", "x" ausgeführt wird
  • THEN beginnt x in Spalte 29 (Zone nach der belegten übersprungen)

Requirement: Korpus-Stringfunktionen

Die Bibliothek SHALL mindestens folgende Funktionen mit der Semantik des Vorbilds bereitstellen (Zeichen = Unicode-Codepoints, dokumentierte UTF-8-Abweichung): LEN, LEFT$, RIGHT$, MID$ (Funktion), INSTR, UCASE$, LCASE$, STRING$, SPACE$, CHR$, ASC, STR$, VAL. Randfälle folgen dem Vorbild, u. a.: VAL liest das führende Zahlenpräfix und ignoriert Leerraum; STR$ stellt nicht-negativen Zahlen ein Leerzeichen voran; ASC("") löst Fehler 5 „Illegal function call" aus.

Scenario: Korpusdatei strings.bas

  • WHEN tests/compat/strings.bas ausgeführt wird
  • THEN entspricht die Ausgabe byte-genau strings.out

Scenario: VAL mit Restzeichen

  • WHEN VAL(" 12.5abc") ausgewertet wird
  • THEN ist das Ergebnis 12.5