beb693a068
This commit introduces fundamental changes to Myc's language structure to enhance type safety and scoping clarity. Key changes include: - Introducing local scopes for `do` blocks. - Separating statements (`def`, `assign`) from expressions, where statements now have no return value and are only allowed within blocks. - A block now consists of multiple statements followed by a single final expression. - Stricter validation rules are enforced, such as disallowing redefinition of local symbols in the same scope while allowing shadowing of outer symbols. - Compiler errors are generated for statements used in expression contexts. The implementation involved modifications to the AST, parser, binder (scope-stack), and various compiler passes, along with VM runtime optimizations.
2.7 KiB
2.7 KiB
Refactoring Log: Block Scoping & Statements
Zielsetzung
Fundamentale Änderung der Myc-Sprachstruktur zur Erhöhung der Typsicherheit und Scoping-Klarheit:
- Lokale Scopes: Jeder
do-Block eröffnet einen eigenen Sichtbarkeitsbereich. - Statement/Expression Trennung:
- Statements (
def,assign) haben keinen Rückgabewert. - Statements sind NUR in Blöcken erlaubt.
- Ein Block besteht aus
nStatements und genau einer finalen Expression.
- Statements (
- 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
- AST-Anpassung:
BlockStruktur inUntypedKindundBoundKindändern. (ERLEDIGT) - Parser-Umbau:
def/assignausparse_expressionentfernt. (ERLEDIGT)parse_doimplementiert die Trennung (ERLEDIGT)- Kompromiss Option B: Expressions als Statements erlaubt, aber ihr Wert wird verworfen. (ERLEDIGT)
- Binder-Erweiterung: Umstellung von flacher Map auf
Vec<HashMap>(Scope-Stack). (ERLEDIGT) - Compiler-Pipeline: Anpassung von
TypeChecker,Analyzer,TCO,Dumper,Captures,LambdaCollector,Specializer,Optimizer. (ERLEDIGT) - VM-Laufzeit: Optimierung der Block-Ausführung. (ERLEDIGT)
Fortschritts-Log
2026-03-09: Initialisierung & Kern-Umbau
- 1. AST-Definitionen anpassen (
nodes.rs,bound_nodes.rs) - 2. Parser-Logik umstellen (
parser.rs) -> Option B umgesetzt. - 3. Binder Scope-Stack implementieren (
binder.rs) -> Echtes Block-Scoping aktiv! - 4. TypeChecker, Analyzer, TCO, Dumper, Optimizer Updates (ERLEDIGT)
- 5. VM Anpassung & Testing (ERLEDIGT)
2026-03-09: Fehlerbehebung & Stabilisierung (100% Pass Rate)
- Letrec Semantik:
VMpusht nun Platzhalter beiDefine, bevor der Wert evaluiert wird, um lokale Rekursion (z.B. in Lambdas) zu ermöglichen. - Stack Cleanup: Die
VMräumt nun am Ende einesBlockalle dort angelegten lokalen Variablen (stack.truncate) auf, was Hygiene-Bugs durch Stack-Pollution verhindert. - Destructuring Rewrite:
VM::unpackwurde von einer Array/Offset-basierten Logik auf eine rein rekursiveValue-basierte Logik umgeschrieben, die "Stack Underflow" Fehler eliminiert. - Stabilität beim Benchmarking: Fix der
Stack gapPanics in der VM. Die VM füllt nun Lücken im Stack automatisch mitVoidauf, 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.