Add a new Markdown document detailing the AST node structure as it evolves through the compiler's different stages. This includes a diagram illustrating the data flow and relationships between the generic `Node<K, T>` structure and its specialized forms (`UntypedNode`, `BoundNode`, `TypedNode`, `AnalyzedNode`). The document explains the `kind` and `ty` payloads for each stage and their significance. Also removes a deleted file related to a previous optimization plan and adds new files for future optimization plans.
1.8 KiB
Record Optimization Plan
Dieses Dokument beschreibt geplante Optimierungen für Records im Myc-Compiler, um die Performance bei Datenstrukturen zu steigern.
1. Constant Folding für Record-Literale
Status: Aktuell werden Record-Literale in engine.rs nur rekursiv besucht, aber nicht gefaltet.
Ziel: Wenn alle Felder (Keys und Values) eines Records Konstanten sind, soll der gesamte Record in eine BoundKind::Constant(Value::Record(...)) transformiert werden.
Umsetzung:
- In
src/ast/compiler/optimizer/folder.rseine Methodetry_fold_recordimplementieren. - In
src/ast/compiler/optimizer/engine.rsim CaseBoundKind::Recorddiese Methode aufrufen. - Dies ermöglicht es dem bereits existierenden Folder für
BoundKind::GetField, Feldzugriffe auf Literalen direkt zur Kompilierzeit aufzulösen.
2. Record Inlining in SubstitutionMap
Status: Records werden derzeit nicht aggressiv in die SubstitutionMap aufgenommen, wenn sie Variablen zugewiesen werden.
Ziel: Zuweisungen von (konstanten) Records an Variablen sollen in sub.values gespeichert werden.
Beispiel:
(def r {:x 10 :y 20})
(.x r) ; Sollte zu 10 optimiert werden
Umsetzung:
- Sicherstellen, dass
Value::RecordvonInliner::is_inlinable_valueals sicher eingestuft wird. - Testen, ob
BoundKind::GetFieldbei einemGetauf eine Variable, die insub.valuesals Record bekannt ist, den Wert extrahieren kann.
3. Propagation von Record-Layouts
Ziel: Wenn das Layout eines Records statisch bekannt ist (auch wenn die Werte nicht konstant sind), könnten Feldzugriffe (GetField) effizienter vorbereitet werden, um die Laufzeit-Suche im Layout-Hash/Index zu minimieren.
Erstellt am 26. Februar 2026 zur Nachverfolgung der Optimizer-Verbesserungen.