Doku-Drift fixen + Iter-5d-JOURNAL nachreichen

JOURNAL bekommt fehlenden Iter-5d-Eintrag und Iter-5-Architektur-
Review-Notiz mit Iter-6-Plan (Aufräumarbeiten). DESIGN.md korrigiert
zwei Drifts vom Architekt-Befund: @main ist i32 (C-/LLVM-ABI), nicht
i64; String-Globals tragen Hint @.str_<modul>_<hint>_<idx>.
This commit is contained in:
2026-05-07 11:50:49 +02:00
parent 2114fb2f6a
commit b1dbafc6f2
2 changed files with 64 additions and 4 deletions
+7 -4
View File
@@ -103,10 +103,13 @@ Trade-off: keine Inline-Optimierungen über die LLVM-API. Wir setzen auf
## Mangling-Schema (Iter 5c)
Alle AILang-Funktionen werden zu `@ail_<modul>_<def>` gemangelt — auch im
Single-Modul-Fall. Globale Strings/Konstanten zu `@.str_<modul>_<idx>`
bzw. `@ail_<modul>_<def>`. Eintrittspunkt ist eine `define i64 @main()`-
Trampoline, die `@ail_<entry-modul>_main()` aufruft. `source_filename`
existiert genau einmal pro Workspace und trägt den Eintrittsmodulnamen.
Single-Modul-Fall. Konstanten ebenfalls (`@ail_<modul>_<const>`). Globale
String-Literale tragen einen kurzen Hint zur Lesbarkeit:
`@.str_<modul>_<hint>_<idx>` (z. B. `@.str_sum_fmt_int_0`). Eintrittspunkt
ist eine `define i32 @main()`-Trampoline (C-/LLVM-ABI), die
`@ail_<entry-modul>_main()` aufruft. `source_filename` existiert genau
einmal pro Workspace und trägt den Eintrittsmodulnamen
(`<entry-modul>.ail`).
## Konvention: Qualifizierte Cross-Module-Verweise (Iter 5b)
+57
View File
@@ -292,3 +292,60 @@ IR-Snapshots.
**Stand:** Modulsystem ist Ende-zu-Ende geschlossen — Loader + Typcheck
+ Codegen + Build sehen den Workspace als kohärente Einheit. Multi-
Diagnose-Refactor und ggf. ADT-Cross-Module bleiben für später.
## 2026-05-07 — Iter 5d fertig: Tooling auf Workspace ausgedehnt
- `ail manifest|describe|deps|diff <entry> --workspace` arbeiten jetzt
über alle Module des Workspaces. Default ohne Flag bleibt single-modul
für Rückwärtskompatibilität. Manifest sortiert nach `(modul, name)`,
describe akzeptiert Punktnotation `ws_lib.add`, deps emittiert
`{from_module, from_def, to_module, to_def}`-Edges, diff vergleicht
workspace-übergreifend mit added/removed/changed/unchanged_modules
und nested Sub-Diff pro changed_module.
- Refactor: `diff_def_lists` ist die einzige Quelle der 4-Kategorie-
Logik; Single- und Workspace-Diff teilen sie.
- Tests: 44 grün (vorher 40). Neu: `manifest_workspace_lists_all_defs`,
`describe_workspace_resolves_qualified_name`,
`deps_workspace_includes_cross_module`, `diff_workspace_added_module`.
**Beobachtung (Schuld):** `deps` filtert Builtins/Locals/Funktions-
parameter nicht. Im Workspace-Modus wird das deutlicher als im Single-
Modus — `ws_lib.add` listet Edges auf `ws_lib.+` (Builtin) und
`ws_lib.a`/`ws_lib.b` (Funktionsparameter). Bekanntes Vorbestand-
Problem aus Iter 2; Task #22 im Backlog.
## 2026-05-07 — Architektur-Review nach Iter 5
Architekt-Agent gerufen. Befunde:
1. **Mangling-Konsistenz hält.** `@ail_<modul>_<def>` durchgängig in
Funktionen, Konstanten, String-Globals, Cross-Module-Calls.
Trampoline korrekt. ADT-Konstruktoren sind absichtlich symbol-frei
(inline malloc).
2. **Modul-Hashes bitidentisch seit Iter 4.** Iter-5c-Snapshot-
Regenerierung war Codegen-Output-Änderung, nicht Hash-Bruch.
3. **Drift, sofort fällig:**
- DESIGN.md sagt `define i64 @main()`, der Codegen emittiert
`define i32 @main()` (siehe `sum.ll:35`).
- Stringschema-Notation in DESIGN.md verkürzt
(`@.str_<modul>_<idx>` statt `@.str_<modul>_<hint>_<idx>`).
4. **Schulden, die Zinsen tragen:** `deps`-Builtin-Leck (Task #22) ist
im Workspace-Modus zu einer Falschaussage geworden — vor dem
nächsten großen Sprung schließen.
**Plan Iteration 6 — Aufräumarbeiten:**
1. **DESIGN.md-Drift fixen.** Mangling-Schema-Block aktualisieren,
`@main`-Signatur korrigieren, String-Globals präzise notieren.
2. **`deps`-Härtung (#22).** Pro Workspace eine Top-Level-Def-Tabelle
bauen; Edges, deren Ziel kein Top-Level-Symbol ist, filtern oder
als separate `builtin:`/`local:`-Kategorie ausgeben.
Funktionsparameter via Lexikalisches Scope-Tracking aus walk_term.
3. **Multi-Diagnose-Refactor (#20).** `check_workspace` akkumuliert
`Vec<Diagnostic>` über alle Defs, statt beim ersten Error zu
shortcuten. Intra-Def darf weiter shortcuten — der Wert ist
"alle defektiven Defs auf einmal sehen", nicht "alle defektiven
Subterme einer Def sehen".
Reihenfolge: 1 zuerst (Doku-Trivialität), dann 2 vor 3 (deps ist eine
Tooling-Wahrheit-Reparatur, Multi-Diag eine Strukturerweiterung).