Lyx – Programmiersprache – Überblick
Lyx ist eine kompakte, statisch typisierte, prozedurale Sprache mit einem nativen Compiler (geschrieben in FreePascal), der direkt ausführbare Binaries für mehrere Plattformen erzeugt – ohne externe Abhängigkeiten wie libc oder einen externen Linker (pure Syscalls oder WinAPI).
Der Fokus hat sich von einer reinen Linux x86_64-Sprache zu einem multitarget-fähigen System entwickelt, das echtes Cross-Compiling unterstützt.
Repository: https://github.com/SEOLizer/LyX-Compiler
TL;DR (Stand v0.5.7)
Output: Native Binaries für Linux (ELF64), Windows (PE64), macOS (Mach-O) und ESP32 (Xtensa).
Architekturen: x86_64, ARM64 (AArch64), Xtensa.
Runtime: Minimal – Builtins + direkte Syscalls, kein libc-Zwang.
Status: Hochentwickelt mit Generics, Pattern Matching, Exceptions und einer umfangreichen Standardbibliothek.
Besonderheit: Energy-Aware-Compiling zur Optimierung des Stromverbrauchs auf Instruction-Ebene.
Architektur & Ziele
Architektur-Stabilität: Strikte Trennung zwischen Frontend (targetneutral), Middle-End (IR-Optimierungen) und plattformspezifischen Backends.
IR-Level Optimizer (v0.5.0): Constant Folding, CSE, DCE, Copy Propagation und Strength Reduction.
Bootstrap-Fähigkeit: Ein Lyx-in-Lyx-Compiler befindet sich im Aufbau (Work-in-Progress).
Vorhersehbarkeit: Explizites Speichermodell und deterministisches Laufzeitverhalten.
Sprache (Kern & Features)
Moderne Syntax & Typen
Lyx kombiniert Pascal-Klarheit mit modernen Features wie dem Pipe-Operator (|>).
Erweiterte Typen:
| Typ | Beschreibung |
|---|---|
| int64 | Standard 64-bit Integer |
| f32 / f64 | Floating-Point (IEEE 754) |
| array | Dynamische Arrays (Heap, Fat-Pointer mit push/pop/len/free) |
| parallel Array | SIMD-optimierte Arrays für parallele Operationen |
| Map<K,V> | Assoziative Arrays (HashMaps) |
| QBool | Probabilistischer Boole'scher Typ (Quanten-inspiriert) |
| pchar? | Nullable Pointer mit Null-Coalescing Operator (??) |
Fortgeschrittene Features (v0.5.6+)
Generics: Monomorphisierung von Funktionen, z.B. fn max[T](a: T, b: T): T.
Pattern Matching: Mächtiges match/case System mit OR-Patterns.
Exceptions: try/catch/throw für robustes Error-Handling.
Multi-Return: Funktionen können Tupel zurückgeben: var a, b := f().
Standardbibliothek (std)
Lyx kommt mit einer „Batteries-included“ Standardbibliothek:
std.net: Über 14 Protokolle (DNS, HTTP/S, SMTP, IMAP, MQTT, SNMP, SSH, BGP, SIP).
std.math: Umfassende mathematische Funktionen inkl. Fixed-Point und Geodaten-Berechnungen.
std.string: StringBuilder, Splitting und Formatierung.
std.fs & std.io: Dateisystem-Operationen und I/O-Abstraktionen.
Energy-Aware-Compiling
Einzigartig in Lyx ist die Möglichkeit, den Energieverbrauch des Zielprogramms zu steuern:
Global: Über den CLI-Flag –target-energy=<1-5> (1 = Minimaler Verbrauch/Batterie, 5 = Maximale Performance).
Lokal: Per Pragma @energy(level) für einzelne Funktionen. Der Compiler liefert nach der Übersetzung detaillierte Energy Statistics über ALU/FPU-Operationen und Speicherzugriffe.
Backend & Cross-Compilation
Lyx unterstützt Cross-Compilation „out of the box“:
./lyxc main.lyx -o main.exe --target=win64 # Windows x64 ./lyxc main.lyx -o main --target=macos-arm64 # Apple Silicon ./lyxc main.lyx -o firmware.elf --target=esp32 # ESP32 (Xtensa)
| Plattform | Architektur | ABI / Interface |
|---|---|---|
| Linux | x86_64 / ARM64 | SysV / Syscalls |
| Windows | x86_64 | Win64 ABI / kernel32.dll |
| macOS | x86_64 / ARM64 | Mach-O / BSD Syscalls |
| ESP32 | Xtensa | ELF32 / ESP-Syscalls |
Projektstruktur
lyx-lang/ ├── compiler/ # FPC-basierter Compiler (lyxc) │ ├── frontend/ # Lexer, Parser, Sema, Linter (13 Regeln) │ ├── ir/ # Intermediate Representation & Optimizer │ └── backend/ # Emitter für ELF, PE, Mach-O, Xtensa ├── std/ # Standardbibliothek (in Lyx geschrieben) ├── bootstrap/ # Lyx-in-Lyx Projekt (Self-hosting) └── tests/ # Umfangreiche Regression- & Feature-Tests
FAQ (Update)
Warum kein GC? Lyx nutzt explizites Ownership und free/dispose, um minimale Binaries und volle Kontrolle zu gewährleisten.
Was ist QBool? Ein spezieller Typ für probabilistische Logik (0.0 bis 1.0 Wahrscheinlichkeit), nützlich für Simulationen oder Quanten-Logik-Tests.
Wie stabil ist ARM64? Sehr stabil. Lyx unterstützt auf ARM64 volle dynamische Verlinkung (PLT/GOT) und alle Standard-Features.
Erste Schritte Lyx – Objektorientierte Programmierung (OOP) Lyx – Arrays & Maps Arrays & Datensammlungen DO-178C Compliance in Lyx Schleifen in Lyx Bedingungen (if / else) Exception Handling Pointer & Inlining Attributes & Pragmas (Metadaten) Interoperabilität (FFI) Generics & Traits Lyx Compiler selbst kompilieren WCET Analyse (Worst Case Execution Time) Bootstrapping & Bare Metal (Linker Scripts)
