====== Lyx – Datentypen ====== Diese Seite gibt einen technischen Überblick über die aktuell unterstützten Datentypen in Lyx sowie deren Implementierungsstatus im Compiler (Stand v0.9.0). ===== Aktuell unterstützte Datentypen ===== ==== 1. Ganzzahl-Typen (signiert) ==== ^ Typ ^ Bits ^ Wertebereich ^ Status ^ Literale ^ | int8 | 8 | -128 bis 127 | ✅ Full | 42i8 | | int16 | 16 | -32,768 bis 32,767 | ✅ Full | 42i16 | | int32 | 32 | -2,147,483,648 bis 2,147,483,647 | ✅ Full | 42i32 | | int64 | 64 | -9,223,372,036,854,775,808 bis … | ✅ Full | 42 | | int | 64 | Alias für int64 | ✅ Full | 42 | ==== 2. Ganzzahl-Typen (unsigniert) ==== ^ Typ ^ Bits ^ Wertebereich ^ Status ^ Literale ^ | uint8 | 8 | 0 bis 255 | ✅ Full | 42u8 | | uint16 | 16 | 0 bis 65,535 | ✅ Full | 42u16 | | uint32 | 32 | 0 bis 4,294,967,295 | ✅ Full | 42u32 | | uint64 | 64 | 0 bis 18,446,744,073,709,551,615 | ✅ Full | 42u64 | ==== 3. Plattform-abhängige Typen ==== ^ Typ ^ Beschreibung ^ Status ^ Anmerkung ^ | isize | Pointer-Größe (signiert) | ✅ Full | Geprüft auf x86_64, ARM64, RISC-V | | usize | Pointer-Größe (unsigniert) | ✅ Full | Standard für Array-Indizes | ==== 4. Fließkomma-Typen ==== ^ Typ ^ Bits ^ IEEE 754 ^ Status ^ Literale ^ | f32 | 32 | single | ✅ Full | 3.14f32 | | f64 | 64 | double | ✅ Full | 3.14 | ==== 5. Komplexe Typen & Container ==== ^ Typ ^ Beschreibung ^ Status ^ Literale / Syntax ^ | array | Dynamisches Array (Heap) | ✅ Full | [1, 2, 3] | | parallel Array | SIMD-optimiertes Array | ✅ Full | parallel Array(100) | | Map | Hash-Map (Assoziativ) | ✅ Full | {key: value} | | type S = struct | Stack-allozierte Struktur | ✅ Full | S { x: 10 } | | type C = class | Heap-allozierte Klasse | ✅ Full | new C() | ==== 6. Zeichen- und String-Typen ==== ^ Typ ^ Beschreibung ^ Status ^ Literale ^ | char | Ein ASCII-Zeichen | ✅ Full | 'a' | | pchar | Nullterminierter String (Pointer) | ✅ Full | "hello" | ==== 7. Spezial-Typen ==== ^ Typ ^ Beschreibung ^ Status ^ Verwendung ^ | bool | Wahrheitswert | ✅ Full | true, false | | qbool| Probabilistischer Quanti-Typ | ✅ Full | 0.5q (50% true) | | any | Typsichere Wildcard | ⚠️ Partial | Generics | ===== 8. Range-Typen (Sicherheitskritisch) ===== Lyx unterstützt die Definition von Integer-Typen mit eingeschränkten Wertebereichen. > **Zertifizierungs-Hinweis:** > Range-Typen sind ein essenzielles Feature zur Erfüllung der **DO-178C** Anforderungen. Sie verhindern ungültige Systemzustände durch strikte Werteprüfung zur Compile- und Laufzeit. > Details zur Implementierung finden Sie unter: [[lyx_-_programmiersprache:do-178c#datensicherheit_range-types|DO-178C Compliance]]. ==== Syntax ==== type Altitude = int64 range -1000..60000; type Speed = int64 range 0..300; * **Compile-Time Check:** Literale, die außerhalb des Bereichs liegen, erzeugen einen Fehler. * **Runtime Check:** Nicht-konstante Zuweisungen werden durch IR-Checks überwacht; bei Verletzung wird ein ''panic'' ausgelöst. ===== Implementierungsdetails ===== ==== Speicherverwaltung & Storage ==== ^ Keyword ^ Speicherort ^ Änderbar ^ Besonderheit ^ | var | Stack / Data | Ja | Mutable Variable | | let | Stack / Data | Nein | Immutable nach Init | | co | Stack | Nein | Runtime-constant | | con | - | Nein | Compile-time constant (Immediate) | ==== Typkonvertierung & Prüfung ==== * **Explizite Casts:** Unterstützt via ''as''-Operator (z.B. ''val as int32''). * **Null-Safety:** ''pchar?'' (Nullable) mit Null-Coalescing Operator ''??''. * **Linter:** Der integrierte Linter prüft auf ungenutzte Variablen und riskante Typumwandlungen. ===== Status-Update: v0.9.0 ===== * **Aerospace-Garantien:** Range-Typen und @redundant-Variablen stabil integriert. * **SIMD Support:** parallel Array nutzt Hardware-Beschleunigung für Berechnungen. * **Cross-Arch:** Vollständige Unterstützung für x86_64, ARM64 und RISC-V.