====== Lyx — Sprachreferenz ====== Vollständige Referenz der Sprache: Lexik und Syntax, Typsystem, Kontrollfluss, Modulaufbau, Speichermodell, Nebenläufigkeit und die systemnahen Ebenen bis hinunter zum ABI. **26 Seiten** in fünf Themenfeldern. → [[lyx_-_programmiersprache:start|Übersicht]] · [[lyx_-_programmiersprache:erste-schritte|Erste Schritte]] · [[lyx_-_programmiersprache:units|Standard Library]] · [[lyx_-_programmiersprache:guides|Guides]] ---- ===== Lyx in zehn Sätzen ===== * **Statisch und explizit typisiert.** Keine impliziten Konvertierungen — jede Umwandlung steht als ''as'' im Code. * **''=='' vergleicht, '':='' weist zu.** Ein einzelnes ''='' setzt den Vorgabewert eines Parameters; in jeder anderen Stellung wird es abgewiesen ([[https://github.com/SEOLizer/LyX-Compiler/issues/1575|#1575]] behoben). * **Kein Zeigertyp.** Adressen sind ''int64'', gelesen und geschrieben wird mit ''peek8/16/32/64'' und ''poke8/16/32/64''. ''%%^%%'' ist ausschließlich XOR. * **Eine Datei = eine Unit = ein Namensraum**, flach: es gibt keinen qualifizierten Zugriff, Kollisionen werden beim Import gemeldet. * **Ganzzahlen tragen ihre Breite im Namen** — ''int8''…''int64'' und ''uint8''…''uint64'', jeweils mit einer Kurzform (''i8''…''i64'', ''u8''…''u64''). Ein blankes ''int'' existiert nicht. * **Klassen liegen auf dem Heap, Structs auf dem Stack**; freigegeben wird ausdrücklich mit ''dispose'', es gibt keinen Garbage Collector. * **Keine Closures.** Anonyme Funktionen fangen keinen Kontext ein; Zustand wird als Parameter übergeben. * **Fehler laufen über Rückgabewerte** (''Result''-/''Option''-Typen, Fehlercodes) — ''try''/''catch'' existiert, ''panic'' ist bewusst nicht abfangbar. * **Safety ist Teil der Sprache**: Range-Typen, ''limit(N)'' an Schleifen, ''@dal''-Stufen und ''@stack_limit'' sind Sprachmittel, keine Bibliothek. * **Zero-Privilege-Modell**: ''@capabilities'' beschreibt, was ein Programm darf, und erzeugt daraus einen seccomp-Filter. Die verbindliche Grammatik steht in ''ebnf.md'' im Compiler-Repository. Weicht eine Seite hier davon ab, gilt die Grammatik — und die Abweichung gehört gemeldet. ---- ===== Grundlagen ===== Der Einstieg, in dieser Reihenfolge lesbar. ^ Seite ^ Inhalt ^ | [[lyx_-_programmiersprache:sprache:syntax|Syntax]] | Programmaufbau, Kommentare, Bezeichner, Literale, vollständige Operatortabelle mit Präzedenz, Speicherklassen ''var''/''let''/''co''/''con'' | | [[lyx_-_programmiersprache:sprache:variablen|Variablen]] | Deklaration, die vier Speicherklassen in der Praxis, Startwerte, Typableitung, Gültigkeitsbereich und Verdecken, Variablen auf Modulebene, Lebensdauer | | [[lyx_-_programmiersprache:sprache:datentypen|Datentypen]] | Alle Integer-Typen samt Kurzformen, ''f32''/''f64'', ''bool'', ''char'', ''pchar'', Arrays, ''Map'', Range-Typen, Implementierungsstatus | | [[lyx_-_programmiersprache:sprache:funktionen|Funktionen]] | ''fn'', Parameter mit Vorgabewerten, benannte Argumente, Tupel-Rückgabe, Funktionstypen, anonyme Funktionen, Pipe-Operator ''%%|>%%'' | | [[lyx_-_programmiersprache:sprache:bedingungen|Bedingungen]] | ''if''/''else if''/''else'', ''if'' als Ausdruck, Vergleichs- und Logikoperatoren, fehlender Short-Circuit, MC/DC | | [[lyx_-_programmiersprache:sprache:schleifen|Schleifen]] | ''while'', ''for … to''/''downto'', ''repeat … until'', ''limit(N)'' als Terminierungsnachweis, ''break''/''continue'' | | [[lyx_-_programmiersprache:sprache:arrays|Arrays & Maps]] | Feste Arrays ''[N]T'' und zwei Dimensionen, dynamische ''array<T>'', ''Map<K,V>'' mit ganzzahligen Schlüsseln, Bereichsprüfung | | [[lyx_-_programmiersprache:sprache:enums|Enums]] | Enum-Deklaration, explizite Werte, Zugriff mit ''::'', Bit-Flags, Zusammenspiel mit ''match'' | ===== Typsystem ===== ^ Seite ^ Inhalt ^ | [[lyx_-_programmiersprache:sprache:typaliase-und-typumwandlung|Typaliase & Typumwandlung]] | ''type''-Aliase, Range-Typen mit Compile- und Laufzeitprüfung, ''as''-Umwandlungstabelle, ''is''-Typtest | | [[lyx_-_programmiersprache:sprache:generics-traits|Generics & Interfaces]] | Generische Funktionen (Monomorphisierung), ''interface'' + ''implements''; **kein** ''trait''/''impl'', keine generischen Typen | | [[lyx_-_programmiersprache:sprache:pattern-matching|Pattern Matching]] | ''match'' mit Wert-, Bereichs- und Alternativmustern, ''when''-Wächter, Erschöpfungsprüfung, Destrukturierung | | [[lyx_-_programmiersprache:sprache:rekursion|Rekursion]] | Endrekursion und automatische TCO, Stack-Tiefe nachweisen, ''@stack_limit'', ARM64-Prolog-Falle | ===== Module & Struktur ===== ^ Seite ^ Inhalt ^ | [[lyx_-_programmiersprache:sprache:module-und-importe|Module & Importe]] | ''unit''/''import''/''pub'', Suchreihenfolge, vorkompilierte ''.lyu''-Units, Symbolkollisionen und wie man sie vermeidet | | [[lyx_-_programmiersprache:sprache:oop|OOP]] | ''struct'' vs. ''class'', Methoden, Konstruktor und ''Destroy'', Vererbung mit ''extends'', ''virtual''/''override'', ''interface'' | | [[lyx_-_programmiersprache:sprache:exception-handling|Fehlerbehandlung]] | ''Result''- und ''Option''-Typen aus ''std.result'', ''try''/''catch''/''finally'', ''defer'', ''panic'' (nicht abfangbar) | | [[lyx_-_programmiersprache:sprache:exit-codes|Exit-Codes]] | Rückgabewert von ''main'', ''exit()'', reservierte Bereiche, eigene Codes entwerfen, Signaltod eines Kindprozesses | ===== Speicher & Nebenläufigkeit ===== ^ Seite ^ Inhalt ^ | [[lyx_-_programmiersprache:sprache:memory-management|Memory Management]] | Stack vs. Heap, ''new''/''dispose'', ''alloc''/''free'' vs. ''malloc''/''free_mem'', Lebensdauer, DO-178C-Regeln | | [[lyx_-_programmiersprache:sprache:rohspeicher|Rohspeicher]] | Adressen als ''int64'', ''peek''/''poke'', Struct-Layout von Hand über Offsets, Ausrichtung | | [[lyx_-_programmiersprache:sprache:handles-und-fd|Handles & FD]] | Kernel-Deskriptor vs. Userspace-Handle, wem die Freigabe gehört, typische Leck-Muster | | [[lyx_-_programmiersprache:sprache:std-fehlerkonventionen|Fehlerkonventionen der Stdlib]] | Wann ''<0'', wann ''==0'', zweistufige Prüfung (PostgreSQL), Fehlercodes nachschlagen | | [[lyx_-_programmiersprache:sprache:threads|Threads & Nebenläufigkeit]] | ''ThreadCreate''/''ThreadJoin'', Mutex, Atomics, TLS, Speichermodell und Barrieren | ===== Systemnahe Ebenen ===== ^ Seite ^ Inhalt ^ | [[lyx_-_programmiersprache:sprache:pointer-inlining|Low-Level: Speicherzugriff & Pragmas]] | Systemprogrammierung ohne Zeigertypen: MMIO, Registerzugriff, was es an Pragmas wirklich gibt | | [[lyx_-_programmiersprache:sprache:attributes-pragmas|Attributes & Pragmas]] | Die tatsächlich vorhandenen Attribute — ''@flight_crit'', ''@dal'', ''@stack_limit'', ''@wcet'', ''@redundant'', ''@big_endian'', ''@export'' | | [[lyx_-_programmiersprache:sprache:ffi|FFI]] | ''extern fn'' mit **pflichtiger** ''link''-Klausel, Typabbildung nach C, Grenzen (zwei ''pchar''-Parameter), Sicherheitsregeln | | [[lyx_-_programmiersprache:sprache:capabilities|Capabilities (LCBS)]] | ''@capabilities'' auf Modulebene, ''grant''/''restrict'' am Import, erzeugter seccomp-Filter, was durchgesetzt wird und was nicht | | [[lyx_-_programmiersprache:sprache:abi-calling-conventions|ABI & Calling Conventions]] | System V AMD64 und AAPCS64, Parameter- und Rückgaberegister, Stack-Layout, Aufrufkonvention für ''fn''-Zeiger | ---- ===== Lesepfade ===== ^ Ziel ^ Reihenfolge ^ | **Sprache lernen** | [[lyx_-_programmiersprache:erste-schritte|Erste Schritte]] → Syntax → Variablen → Datentypen → Funktionen → Bedingungen → Schleifen → Arrays | | **Größeres Programm strukturieren** | Module & Importe → OOP → Fehlerbehandlung → Exit-Codes | | **Systemnah arbeiten** | Rohspeicher → Handles & FD → Low-Level → FFI → ABI | | **Sicherheitskritisch entwickeln** | Datentypen (Range-Typen) → Schleifen (''limit'') → Rekursion (''@stack_limit'') → Attributes & Pragmas → [[lyx_-_programmiersprache:guides:do-178c|DO-178C]] | | **Programm eindämmen** | Capabilities → FFI → [[lyx_-_programmiersprache:guides:netzwerk|Netzwerk-Guide]] | > **Warnkästen auf diesen Seiten sind Messwerte, keine Vermutungen.** Jeder beschreibt Verhalten, das gegen eine benannte Compiler-Fassung geprüft wurde, und nennt in der Regel die Issue-Nummer. Steht dort „seit lyxc 1.0.17C", ist der Punkt behoben; steht dort ein Defekt ohne Versionsangabe, gilt er zum genannten Prüfstand noch. Letzte Aktualisierung: 2026-08-12 — neue Seite „Variablen" aufgenommen; Einordnung „Lyx in zehn Sätzen", Lesepfade und Abschnittsgliederung ergänzt; sämtliche Kurzbeschreibungen gegen den Seiteninhalt und ''lyxc 1.0.17E'' berichtigt (unter anderem ''float64'' → ''f32''/''f64'', ''pub/priv'' → ''pub'', „Trait-Bounds" → ''interface''/''implements'', „Inline-Zeiger" → zeigerfreier Speicherzugriff, Map-Iteration entfernt).