OpenSpec: phase-3-ortszeit archiviert, Delta-Specs gesynct
konsolen-basisbibliothek um drei Anforderungen erweitert: Zeitfunktionen liefern Ortszeit, Zonenermittlung mit Rueckfallebene, Programmversatz wirkt auf die Ortszeit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# Ortszeit statt UTC
|
||||
|
||||
## Why
|
||||
|
||||
`DATE$`, `TIME$`, `TIMER` und `NOW` liefern heute koordinierte Weltzeit.
|
||||
Das ist keine Rekonstruktion des Vorbilds, sondern eine Notlösung: die
|
||||
Standardbibliothek von Rust kennt keine Zeitzonen, und in
|
||||
`phase-3-runtime-bildschirm` sollte die erste schwere Abhängigkeit der
|
||||
Laufzeit nicht nebenbei entstehen. Die Abweichung steht in
|
||||
docs/sprachreferenz.md.
|
||||
|
||||
Für ein BASIC zum Bauen von Terminal-Werkzeugen ist das ein echter
|
||||
Mangel: Ein Programm, das eine Uhr anzeigt, ein Protokoll schreibt oder
|
||||
einen Termin prüft, zeigt schlicht die falsche Zeit — je nach Zone um
|
||||
Stunden daneben. Das Vorbild lief auf der Ortszeit des Rechners; jedes
|
||||
übernommene Programm rechnet damit.
|
||||
|
||||
Der Projektinhaber hat am 2026-09-04 entschieden, dafür eine Bibliothek
|
||||
in die Laufzeit aufzunehmen. Dieser Change zieht die Abweichung zurück.
|
||||
|
||||
## What Changes
|
||||
|
||||
- **Zeitfunktionen liefern Ortszeit**: `DATE$`, `TIME$`, `TIMER` und
|
||||
`NOW` rechnen in der Zeitzone des Rechners statt in UTC. `TIMER` zählt
|
||||
Sekunden seit der **lokalen** Mitternacht.
|
||||
- **Sommerzeit wird berücksichtigt**: Der Versatz wird für den jeweiligen
|
||||
Zeitpunkt bestimmt, nicht einmalig beim Programmstart — ein Programm,
|
||||
das über einen Zeitumstellungspunkt hinweg läuft, folgt ihm.
|
||||
- **Neue Abhängigkeit in `tb-runtime`**: eine Zeitzonenbibliothek, deren
|
||||
Berührungsfläche bewusst auf eine einzige Frage beschränkt bleibt —
|
||||
„welcher UTC-Versatz gilt zu diesem Zeitpunkt?". Die Kalenderrechnung
|
||||
(serielle Datumswerte, `WEEKDAY`, Zerlegung) bleibt die vorhandene,
|
||||
getestete Eigenimplementierung in `tb-runtime::datetime`.
|
||||
- **Rückfallebene**: Lässt sich die Zeitzone des Rechners nicht
|
||||
ermitteln, gilt UTC. Das Programm läuft weiter; die Rückfallebene ist
|
||||
über eine Funktion der Laufzeit erkennbar und dokumentiert.
|
||||
- **`DATE$ =` / `TIME$ =` bleiben ein Programmversatz** (sie stellen
|
||||
nicht die Systemuhr) — sie wirken künftig auf die Ortszeit.
|
||||
- **Abweichung zurückziehen**: Der Eintrag „Uhr läuft in UTC" entfällt
|
||||
aus docs/sprachreferenz.md; an seine Stelle tritt die Beschreibung der
|
||||
Zonenermittlung samt Rückfallebene.
|
||||
- **Stufe 2 im PLAN**: Die Zeitzonenbibliothek wird in den Ideenspeicher
|
||||
„Runtime-Bibliotheken als BASIC-Bibliotheken" aufgenommen — neben
|
||||
crossterm —, damit BASIC-Programme später direkt auf Zonen zugreifen
|
||||
können (Zonennamen, Versatz zu einem Zeitpunkt, Umrechnung zwischen
|
||||
Zonen).
|
||||
|
||||
**Non-Goals:** Zeitzonenbehaftete Datentypen im Dialekt (das Vorbild
|
||||
kennt nur lokale Wanduhrzeit); eine Sprachanbindung an die Bibliothek
|
||||
(das ist der Stufe-2-Eintrag, nicht dieser Change); Änderungen an der
|
||||
Zählweise serieller Datumswerte oder an `DATEVALUE`/`TIMEVALUE`, die
|
||||
Wanduhrzeit lesen und daher keine Umrechnung brauchen.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `konsolen-basisbibliothek`: Die Datums- und Zeitfunktionen SHALL die
|
||||
Ortszeit des Rechners liefern statt UTC, einschließlich Sommerzeit und
|
||||
einer dokumentierten Rückfallebene.
|
||||
|
||||
## Impact
|
||||
|
||||
- `crates/tb-runtime/src/datetime.rs`: Versatzermittlung über die neue
|
||||
Bibliothek; `jetzt_serial`/`jetzt_sekunden` liefern Ortszeit. Die
|
||||
Kalenderrechnung bleibt unverändert.
|
||||
- `crates/tb-runtime/src/builtins.rs`: `DATE$`, `TIME$`, `TIMER`, `NOW`
|
||||
rechnen über die neue Funktion.
|
||||
- `Cargo.toml` (Workspace) und `crates/tb-runtime/Cargo.toml`: neue
|
||||
Abhängigkeit.
|
||||
- `tests/compat`: Korpusprogramm für die Zeitfunktionen, das ohne
|
||||
Abhängigkeit von der Zone des Testrechners prüfbar bleibt.
|
||||
- `docs/sprachreferenz.md`: Abweichung „Uhr läuft in UTC" entfällt;
|
||||
Zonenermittlung und Rückfallebene beschrieben.
|
||||
- `docs/bibliothek.md`: Abschnitt Datum/Zeit fortgeschrieben.
|
||||
- `PLAN.md`: Stufe-2-Eintrag um die Bibliothek erweitert.
|
||||
Reference in New Issue
Block a user