Add series module for time-series data
Introduce the `series` module to handle time-series data storage and manipulation. This module includes: - `RingBuffer`: An efficient ring buffer for storing time-series data with a configurable lookback. - `ScalarSeries`: A type-safe series for primitive scalar values (f64, i64, bool) optimized for performance. - `ValueSeries`: A fallback series for non-scalar or mixed data types. - `RecordSeries`: A "Struct of Arrays" implementation for records, splitting fields into parallel series for efficient access.
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
# 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.*
|
||||
Reference in New Issue
Block a user