JOURNAL: Iter-5-Sub-Schritte 5a/5b/5c/5d präzisiert
This commit is contained in:
@@ -193,3 +193,30 @@ ailang-codegen + 7 ailang-core.
|
||||
**Plan Iteration 5:** Modulsystem mit Imports. Cross-Module-Hashing,
|
||||
Import-Auflösung, mehrere `.ail.json`-Files in einem Build. Multi-
|
||||
Diagnose-Refactor erst danach.
|
||||
|
||||
Sub-Schritte:
|
||||
|
||||
- **5a — Workspace-Loader.** `ailang_core::Workspace { modules:
|
||||
BTreeMap<String, Module> }` plus `load_workspace(entry: &Path)`, das
|
||||
`imports` rekursiv vom Eintrittsmodul folgt. Konvention: `import {
|
||||
module: "foo" }` löst auf `<dir>/foo.ail.json` neben dem Entry. Zyklus-
|
||||
Erkennung. CLI: bestehende Subkommandos arbeiten weiter auf einzelnem
|
||||
Modul; ein neues `ail workspace <entry>` listet alle erreichbaren
|
||||
Module mit Hash. Tests: zwei kleine Beispielmodule mit
|
||||
Import-Beziehung; Zyklus-Test.
|
||||
- **5b — Cross-Module-Typcheck.** Typchecker bekommt `&Workspace`
|
||||
statt `&Module`. Imports werden im Env als Namespace eingehängt
|
||||
(`alias.def` oder bei fehlendem Alias `module.def`). Neue Diagnostic-
|
||||
Codes: `unknown-module`, `unknown-import`, `import-cycle`,
|
||||
`ambiguous-name`. Tests pro Code.
|
||||
- **5c — Cross-Module-Codegen.** Emitter erzeugt IR für alle Module im
|
||||
Workspace, prefix-mangelt mit `@ail_<module>_<def>`. E2E-Test:
|
||||
Programm, das eine Funktion aus Modul B in Modul A nutzt, liefert
|
||||
korrektes Ergebnis im Binary.
|
||||
- **5d — Tooling-Anpassungen.** `manifest`, `describe`, `deps`, `diff`
|
||||
bekommen einen `--workspace`-Modus (rekursiv). Single-Modus bleibt
|
||||
Default für Rückwärtskompatibilität.
|
||||
|
||||
Während Iter 5 gleich beim Bau **`source_filename` pfad-unabhängig
|
||||
halten** (nur Modulname, kein Verzeichnis-Prefix), sonst kippen die
|
||||
IR-Snapshots.
|
||||
|
||||
Reference in New Issue
Block a user