Lyx - Datentypen
Diese Seite gibt einen technischen Überblick über die aktuell unterstützten Datentypen in Lyx sowie deren Implementierungsstatus im Compiler.
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` |
| Typ | Beschreibung | Status | Anmerkung |
| `isize` | Pointer-Größe (signiert) | ⚠️ Partial | Definiert, kaum getestet |
| `usize` | Pointer-Größe (unsigniert) | ⚠️ Partial | Definiert, kaum getestet |
4. Fließkomma-Typen
| Typ | Bits | IEEE 754 | Status | Literale |
| `f32` | 32 | single | ✅ REPARIERT | `3.14` |
| `f64` | 64 | double | ✅ REPARIERT | `3.14` |
Status: Lexer, Parser, AST und Sema implementiert. IR-Lowering derzeit Platzhalter (Dummy-Wert).
5. Zeichen- und String-Typen
| Typ | Beschreibung | Status | Literale |
| `char` | Ein ASCII-Zeichen | ✅ REPARIERT | `'a'` |
| `pchar` | Nullterminierter String | ✅ Full | `„hello“` |
| `string` | Alias für `pchar` | ✅ Full | `„hello“` |
6. Sonstige Typen
| Typ | Beschreibung | Status | Verwendung |
| `bool` | Wahrheitswert | ✅ Full | `true`, `false` |
| `void` | Kein Rückgabewert | ✅ Full | Funktionen |
7. Interne Typen
| Typ | Verwendung |
| `atUnresolved` | Temporär während Typprüfung |
Status-Legende
✅ Full – Parser, Sema, IR und Codegen vorhanden
⚠️ Partial – Teilweise implementiert
❌ Missing – Definiert, aber nicht umgesetzt
🔄 WIP – Work in Progress
Implementierungsdetails
Storage-Klassen-Kompatibilität
| Storage | Beschreibung | Status |
| `var` | Veränderbar | ✅ Integer + bool |
| `let` | Immutable | ✅ Integer + bool |
| `co` | Runtime-readonly | ✅ Funktionsfähig |
| `con` | Compile-time constant | ✅ Repariert |
Getestet:
Typkonvertierung
Automatisch: Integer ↔ Integer (verschiedene Breiten)
Explizit: Cast-Operatoren geplant
Constant Folding: Literale werden auf Zieltyp angepasst
Code-Generation-Status
Vollständig
Teilweise
`f32`, `f64` – Frontend OK, Backend fehlt
`isize`, `usize` – Tests fehlen
Fehlend
Union-Typen
Pointer-Arithmetik
Dynamische Arrays
Status-Update: HEAD-Version (0d50afd)
Erfolgreich behoben
Syntaxfehler (`end;` Statements) repariert
`con` Parser-Bug behoben
Bracket-Tokens `[ ]` ergänzt
HEAD kompiliert wieder sauber
Teststatus
Integer-Typen: int8..uint64 ✅
Boolean-Literale ✅
Char-Literale + Escape-Sequenzen ✅
Float-Literale (`3.14`) ✅
Array-Literal-Syntax `[1,2,3]` (Frontend) ✅
Storage-Klassen var/let/co/con ✅
Funktionsrückgaben aller primitiven Typen ✅
Bekannte Einschränkungen
Char-Literale
Vollständig implementiert:
Lexer `tkCharLit`
AST-Knoten
Escape-Sequenzen (`\n`, `\t`, `\\`, `\'`, `\0`)
Fließkomma-Typen
Frontend vollständig, Backend noch Platzhalter.
Array-Literale
Parser und Sema vorhanden, echter Codegen folgt.
`isize`/`usize` implementiert, aber kaum getestet.
Test-Abdeckung
Vollständig getestet
Nicht getestet
Roadmap
Backend-Implementierungen
Float-IR Backend
Array-IR Backend
Erweiterte Array-Typen
Kurzfristig
Mittelfristig
Langfristig
Generics/Templates
Union-Typen
Smart-Pointer
Beispiele
var a: int8 := 127;
let b: uint16 := 65535;
con d: int64 := 9223372036854775807;
var pi: f32 := 3.14159;
let e: f64 := 2.718281828;
var ch: char := 'X';
let msg: pchar := "Hello";
var flag: bool := true;
fn get_byte(): uint8 { return 255; }
fn get_flag(): bool { return true; }
fn do_nothing(): void { print_str("done"); }