Lyx – Arrays & Datensammlungen

In Lyx v0.5.7 gibt es drei Hauptarten von Arrays, die jeweils für unterschiedliche Szenarien (Performance vs. Flexibilität) optimiert sind.

1) Dynamische Standard-Arrays (1D)

Dies ist der Standardtyp für Listen auf dem Heap. Sie sind als „Fat Pointer“ implementiert und speichern intern ihre Kapazität und Länge.

Deklaration: var list: array<int64>;

Initialisierung: list := [1, 2, 3];

Manipulation: Seit v0.5.0 können Elemente mit Postfix-Operatoren direkt verändert werden: list[0]++; oder list[idx]–;.

2) Mehrdimensionale Arrays (Nested)

Lyx unterstützt mehrdimensionale Strukturen durch Schachtelung. Technisch gesehen handelt es sich um „Arrays von Arrays“.

// Ein 2D-Array deklarieren
var matrix: array<array<int64>>;
 
// Zugriff über doppelte Indizes
matrix[y][x] := 100;

Wichtige Merkmale:

Speichermodell: Die Zeilen liegen nicht zwingend kontinuierlich hintereinander im Speicher, da jedes äußere Element ein eigener Pointer auf ein separates Array-Objekt ist.

Flexibilität: Da es geschachtelte Pointer sind, können theoretisch auch „Jagged Arrays“ (ungleich lange Zeilen) erstellt werden.

Zugriff: Der Compiler nutzt rekursive LValue-Regeln, um beliebig tiefe Verschachtelungen wie a[i][j][k] aufzulösen.

3) ParallelArrays (SIMD-optimiert)

Für numerische Berechnungen und High-Performance-Computing bietet Lyx ab v0.2.2 parallel Array<T> an.

SIMD-Power: Operationen wie vecA + vecB werden direkt in Vektor-Instruktionen (SSE2/AVX) übersetzt.

Speicher: Diese Arrays sind immer 16-Byte-aligned und werden via mmap direkt vom Betriebssystem angefordert.

Einschränkung: Sie sind primär eindimensional für die Vektorverarbeitung gedacht.

var v: parallel Array<f64> := parallel Array<f64>(1000);
v[0] := 3.14; // Skalarer Zugriff

4) Maps & Sets (Assoziativ)

Seit v0.5.0 verfügt Lyx über native Syntax für Maps und Sets.

Map-Literal: var m: Map<int64, int64> := {1: 100, 2: 200};

Set-Literal: var s: Set<int64> := {10, 20, 30};

Prüfung: Mit dem in-Operator: if (key in myMap) { … }.

Technische Details:

Die Suche erfolgt aktuell linear (O(n)), was für kleine Sammlungen bis ca. 100 Einträge ideal ist.

Der Speicher wird automatisch über das Lyx-Heap-Management (mmap) verwaltet.

5) Zusammenfassung der Operationen

Typ Zugriff SIMD Speicher-Layout
array<T> a[i] Nein Pointer-Chain (Nested)
parallel Array a[i] Ja Kontinuierlich (Aligned)
Map<K, V> m[key] Nein Key-Value Paare (Heap)

Wichtig: Vergiss nicht, Heap-basierte Arrays und Maps am Ende ihrer Lebensdauer mit dispose freizugeben, um Memory Leaks zu vermeiden.