# 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.rs` eine Methode `try_fold_record` implementieren. - In `src/ast/compiler/optimizer/engine.rs` im Case `BoundKind::Record` diese 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:** ```lisp (def r {:x 10 :y 20}) (.x r) ; Sollte zu 10 optimiert werden ``` **Umsetzung:** - Sicherstellen, dass `Value::Record` von `Inliner::is_inlinable_value` als sicher eingestuft wird. - Testen, ob `BoundKind::GetField` bei einem `Get` auf eine Variable, die in `sub.values` als 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.*