# JOURNAL Chronologische Notizen für mich. Nicht jede Änderung; nur Entscheidungen, Hindernisse, Beobachtungen, die zukünftige Iterationen brauchen. ## 2026-05-07 — Tag 0 - Repo initialisiert. Auftrag in `CLAUDE.md`: LLM-native Sprache, LLVM-Backend. - Designentscheidungen festgehalten in `docs/DESIGN.md`. - Toolchain: `rustc 1.94`, `llvm-config 22.1.3`, `clang` vorhanden. - Entschieden gegen `inkwell` zugunsten LLVM-IR-Text-Emit. Begründung im DESIGN.md. - Workspace-Layout: - `crates/ailang-core` — AST, Type, Hash, JSON-Schema - `crates/ailang-check` — Typchecker (kommt später) - `crates/ailang-codegen` — Lowering + LLVM IR Emit - `crates/ail` — CLI - MVP-Ziel: `examples/sum.ail.json` → Binary, das 55 druckt. **Erreicht.** ## 2026-05-07 — Architektur-Review nach MVP Wieder am Pfad? Im Großen ja. Konkrete Beobachtungen: **Was hält:** - JSON-AST + canonical form + content-hash sind alle Lego-Steine, auf denen spätere Tools ohne Refactor aufsetzen können (`ail deps`, `ail diff`). - LLVM-IR-Text-Pipeline arbeitet wie geplant. Keine libllvm-Versionsschmerzen. - Effekt-Set ist im Typsystem von Anfang an verbaut. Erweiterbar zu row-poly, ohne den Kern zu ändern. **Schulden, die Zinsen tragen:** 1. **`current_block_label_for_phi` ist eine Heuristik** (siehe codegen). Bei verschachtelten `if`-Termen wird sie das falsche Block-Label zurückgeben, weil sie rückwärts den Body scannt. Tickend, weil keine Test-Fälle das bisher triggern. Muss als nächstes fixiert werden, bevor neue Sprachfeatures dazu kommen. 2. **Kein typed-AST.** Codegen liest direkt das Quell-AST und verlässt sich darauf, dass der Typchecker vorher lief. Für MVP OK; sobald ADTs oder Closures dazukommen, brauche ich eine getrennte typisierte IR-Stufe (TIR). 3. **`hash`-Feld ist nicht im AST.** Aktuell hashen wir das Def-Objekt direkt. Wenn ich Hashes später als Felder mitserialisiere (Caching), muss der Hash das Feld vor der Berechnung ausschließen. **Plan Iteration 2 (jetzt):** 1. Block-Label-Tracking sauber machen, verschachteltes-if-Test. 2. Strings als Literal + `io/print_str`. 3. Hello-world-Beispiel als zweiten E2E-Test. 4. CLI: `--json`-Output für maschinelle Konsumenten überall, wo es passt. **Plan Iteration 3:** ADTs + Pattern Matching. Das ist der nächste große Sprung. Erfordert typisierte IR-Stufe (TIR), weil Pattern Matching zu Decision-Trees lowered wird, was eine andere Form ist als der AST. ## 2026-05-07 — Iteration 2 fertig - Block-Label-Tracking robust (verschachtelte `if`s funktionieren). Test `max3_picks_largest` schützt das. - Strings als `Lit::Str { value }`, Type `Str` -> LLVM `ptr`, mit `io/print_str` Effekt-Op. `examples/hello.ail.json` druckt einen String. - CLI: `manifest --json`, `builtins --json` für Tool-Konsumenten. - `ail deps [--of NAME] [--json]` listet Aufruf-Edges. Effekt-Ops sind als `effect:NAME` markiert, damit ein Konsument sie filtern kann. **Architektur-Check:** Keine strukturellen Abweichungen. Codegen liest noch direkt das Quell-AST (TIR-Stufe wird mit ADTs in Iteration 3 nötig).