# Refactoring Log: Block Scoping & Statements ## Zielsetzung Fundamentale Änderung der Myc-Sprachstruktur zur Erhöhung der Typsicherheit und Scoping-Klarheit: 1. **Lokale Scopes**: Jeder `do`-Block eröffnet einen eigenen Sichtbarkeitsbereich. 2. **Statement/Expression Trennung**: - Statements (`def`, `assign`) haben keinen Rückgabewert. - Statements sind NUR in Blöcken erlaubt. - Ein Block besteht aus $n$ Statements und genau einer finalen Expression. 3. **Validierung**: - Redefinition lokaler Symbole im gleichen Scope ist verboten. - Shadowing äußerer Symbole ist erlaubt. - Statements an Expression-Positionen führen zu Compiler-Fehlern. ## Strategie 1. **AST-Anpassung**: `Block` Struktur in `UntypedKind` und `BoundKind` ändern. (ERLEDIGT) 2. **Parser-Umbau**: - `def`/`assign` aus `parse_expression` entfernt. (ERLEDIGT) - `parse_do` implementiert die Trennung (ERLEDIGT) - **Kompromiss Option B**: Expressions als Statements erlaubt, aber ihr Wert wird verworfen. (ERLEDIGT) 3. **Binder-Erweiterung**: Umstellung von flacher Map auf `Vec` (Scope-Stack). (ERLEDIGT) 4. **Compiler-Pipeline**: Anpassung von `TypeChecker`, `Analyzer`, `TCO`, `Dumper`, `Captures`, `LambdaCollector`, `Specializer`, `Optimizer`. (ERLEDIGT) 5. **VM-Laufzeit**: Optimierung der Block-Ausführung. (ERLEDIGT) ## Fortschritts-Log ### 2026-03-09: Initialisierung & Kern-Umbau - [x] 1. AST-Definitionen anpassen (`nodes.rs`, `bound_nodes.rs`) - [x] 2. Parser-Logik umstellen (`parser.rs`) -> Option B umgesetzt. - [x] 3. Binder Scope-Stack implementieren (`binder.rs`) -> Echtes Block-Scoping aktiv! - [x] 4. TypeChecker, Analyzer, TCO, Dumper, Optimizer Updates (ERLEDIGT) - [x] 5. VM Anpassung & Testing (ERLEDIGT) ### 2026-03-09: Fehlerbehebung & Stabilisierung (100% Pass Rate) - [x] **Letrec Semantik**: `VM` pusht nun Platzhalter bei `Define`, bevor der Wert evaluiert wird, um lokale Rekursion (z.B. in Lambdas) zu ermöglichen. - [x] **Stack Cleanup**: Die `VM` räumt nun am Ende eines `Block` alle dort angelegten lokalen Variablen (`stack.truncate`) auf, was Hygiene-Bugs durch Stack-Pollution verhindert. - [x] **Destructuring Rewrite**: `VM::unpack` wurde von einer Array/Offset-basierten Logik auf eine rein rekursive `Value`-basierte Logik umgeschrieben, die "Stack Underflow" Fehler eliminiert. - [x] **Stabilität beim Benchmarking**: Fix der `Stack gap` Panics in der VM. Die VM füllt nun Lücken im Stack automatisch mit `Void` auf, falls der Optimierer ungenutzte Definitionen entfernt hat. **STATUS: ERFOLGREICH ABGESCHLOSSEN.** Alle 64 Tests bestehen. Die Benchmarks laufen stabil. Die Sprache hat nun ein striktes Block-Scoping.