6e6b6a14fb
- Codegen: current_block-Tracking ersetzt die Heuristik im phi-Lowering; verschachtelte if-Ausdrücke produzieren jetzt korrekte LLVM IR. examples/max3.ail.json + Test schützt gegen Regression. - Strings: Lit::Str / Type Str / io/print_str Effekt-Op; Strings sind im MVP immutable Konstanten. examples/hello.ail.json als zweiter E2E-Test. - CLI: --json für manifest und builtins; neuer deps-Subcommand listet statische Symbol-Referenzen pro Definition. Effekt-Ops mit Prefix effect: markiert. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.1 KiB
3.1 KiB
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,clangvorhanden. - Entschieden gegen
inkwellzugunsten LLVM-IR-Text-Emit. Begründung im DESIGN.md. - Workspace-Layout:
crates/ailang-core— AST, Type, Hash, JSON-Schemacrates/ailang-check— Typchecker (kommt später)crates/ailang-codegen— Lowering + LLVM IR Emitcrates/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:
current_block_label_for_phiist eine Heuristik (siehe codegen). Bei verschachteltenif-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.- 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).
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):
- Block-Label-Tracking sauber machen, verschachteltes-if-Test.
- Strings als Literal +
io/print_str. - Hello-world-Beispiel als zweiten E2E-Test.
- 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
ifs funktionieren). Testmax3_picks_largestschützt das. - Strings als
Lit::Str { value }, TypeStr-> LLVMptr, mitio/print_strEffekt-Op.examples/hello.ail.jsondruckt einen String. - CLI:
manifest --json,builtins --jsonfür Tool-Konsumenten. ail deps [--of NAME] [--json]listet Aufruf-Edges. Effekt-Ops sind alseffect:NAMEmarkiert, 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).