Lyx ist nicht nur eine weitere Sprache. Native Linux x86_64, Linux ARM64 und Windows x64 Binaries — ohne libc, ohne Linker, rein über Syscalls und WinAPI.
Starten Sie mit Lyx in wenigen Minuten.
# Compiler bauen make build # Linux-Programm kompilieren und ausführen ./lyxc examples/hello.lyx -o hello ./hello # Für Windows kreuzkompilieren ./lyxc examples/hello.lyx -o hello.exe --target=win64 # Debug flags ./lyxc examples/hello.lyx --emit-asm # IR als Pseudo-Assembler ausgeben ./lyxc examples/hello.lyx --dump-relocs # Relokationen und Symbole anzeigen ./lyxc examples/hello.lyx --no-opt # IR-Optimierungen deaktivieren
Ausgabe:
Hello Lyx
Während andere Sprachen auf riesigen Standard-Bibliotheken aufbauen, spricht Lyx direkt mit dem Linux-Kernel und der Windows API. Cross-Compilation inklusive.
Eine Codebasis, sechs Plattformen. Lyx unterstützt Kreuzkompilierung für Linux, Windows, macOS und ESP32.
ELF64-Binary mit SysV ABI. Direkte Syscalls für maximale Leistung.
Raspberry Pi, Apple Silicon Linux, Cloud Servers
PE32+-Binary mit Windows-x64-Aufrufkonvention. Shadow Space + IAT.
Intel Macs, Mach-O binary with BSD syscalls
Apple Silicon Macs, M1/M2/M3 chips
Xtensa microcontroller, GPIO, UART, built-in syscalls
| Ziel | Format | Aufrufkonvention | OS-Schnittstelle | Status |
|---|---|---|---|---|
linux |
ELF64 | SysV ABI (RDI, RSI, RDX, RCX, R8, R9) | Syscalls | Stable |
arm64 |
ELF64 | AAPCS64 (X0-X7) | Syscalls | Stable |
win64 |
PE32+ | Windows x64 (RCX, RDX, R8, R9 + Shadow Space) | kernel32.dll | Stable |
macosx64 |
Mach-O | SysV ABI | BSD Syscalls | Stable |
macos-arm64 |
Mach-O | AAPCS64 | BSD Syscalls | Stable |
esp32 |
ELF32 | Xtensa (A2-A7) | GPIO, UART | Experimental |
Hinweis: Der --target-Parameter ist optional. Der Compiler wählt automatisch das Host-Betriebssystem als Ziel. Der --arch-Parameter ist ebenfalls optional — Architektur wird automatisch vom Target abgeleitet.
You can also explicitly specify the architecture using --arch:
ARM64-Binaries auf x86_64 testen:
# QEMU installieren sudo apt install qemu-user-static # ARM64-Binary ausführen qemu-aarch64-static ./program
Die Freiheit der Direktheit. In einer Welt, in der moderne Sprachen oft riesige Runtimes und komplexe Abhängigkeiten mit sich schleppen, kehrt Lyx zu den Wurzeln der Systemprogrammierung zurück – ohne den Komfort moderner Syntax opfern zu müssen.
Echte Binär-Autarkie. Die meisten Sprachen verlassen sich auf die C-Standardbibliothek oder externe Linker. Lyx bricht mit dieser Tradition.
Du bist nicht isoliert. Lyx unterstützt die Einbindung externer Bibliotheken, wenn du sie brauchst.
extern fn extern fn für libc/libm IntegrationLyx ist keine lockere Skriptsprache. Es ist für Systeme gebaut, auf die man sich verlassen muss.
Lyx kombiniert die Stärken etablierter Sprachen zu etwas Neuem.
Vollständiges Typsystem mit strenger Typisierung und ohne implizite Konvertierungen.
| Kategorie | Typen | Beschreibung |
|---|---|---|
| Signed Integer | int8 int16 int32 int64 |
Signed 8/16/32/64-bit integers. int = int64 |
| Unsigned Integer | uint8 uint16 uint32 uint64 |
Unsigned 8/16/32/64-bit integers. uint = uint64 |
| Floating Point | f32 f64 |
32-bit and 64-bit IEEE 754 floating point |
| Pointer | pchar pchar? |
Non-nullable (default) and nullable pointers. pchar = null-terminated string |
| Boolean | bool |
true / false |
| Spezial | void usize isize |
Void Rückgabe, unsigned/isigned size_t |
| Arrays | array parallel Array<T> |
Stack-allocated and SIMD-optimized heap arrays |
| Map & Set | Map<K,V> Set<T> |
Associative arrays with O(n) lookup |
| QBool | QBool |
Probabilistic boolean (0.0 to 1.0) |
Explizites Casting mit dem as Operator.
Pointer-Typen können mit ? nullable sein.
parallel Array
Was kann man mit Lyx entwickeln?
Direkter Hardware-Zugriff, Treiber, Betriebssystem-Komponenten. Volle Kontrolle ohne Abstraktions-Overhead.
Minimale Container-Images, Microservices, Kubernetes-ready. Ultra-kleine Binaries für maximale Dichte.
Minimaler Footprint ab 4KB, keine Runtime erforderlich. Perfekt für eingeschränkte Umgebungen.
Klare, lesbare Syntax inspiriert von Pascal. Perfekt zum Erlernen von Systemprogrammierungs-Konzepten.
import std.math; type Point = struct { x: int64; y: int64; }; fn main(): int64 { // Struct literal with fields var p: Point := Point { x: 10, y: 20 }; // Pipe operator and standard library let result: int64 := -42 |> Abs64(); PrintInt(p.x + result); // 52 return 0; }
Leistungsstarke Features für moderne Systemprogrammierung
Declare variables at top-level for global state.
Use con for compile-time constants - no stack allocation.
Quantum-like boolean type (0.0 to 1.0 probability).
Associative arrays for key-value storage.
OOP with polymorphism via Virtual Method Tables.
Built-in logging with levels: DEBUG, INFO, WARN, ERROR.
OS-level access: process, environment, time, filesystem.
No imports needed for common operations.
Vom Quellcode zum ausführbaren Programm in 8 Stufen
Lyx optimizes for energy efficiency with configurable energy levels and per-function pragmas
--target-energy=<1-5>
@energy(1)
fn low_power_task() { ... }
@energy(5)
fn hot_path() { ... }
Inspiziere beliebige Variablen zur Laufzeit ohne Setup. Ausgabe direkt nach stderr.
Setze Inspect() anywhere in deinen Code für sofortiges Debugging.
fn main(): int64 { var count: int64 := 42; var isActive: bool := true; var message: pchar := "Hello, Debug!"; // Inspect any variable at runtime Inspect(count); // Outputs to stderr Inspect(isActive); Inspect(message); return 0; }
So sieht die Inspect() Ausgabe für verschiedene Typen aus:
=== count === Type: int64 Value: 42 === isActive === Type: bool Value: true === message === Type: pchar Value: Hello, Debug!
Inspect erkennt und formatiert automatisch:
10 eingebaute Regeln helfen dir, saubereren und sichereren Code von Anfang an zu schreiben.
Der integrierte Linter prüft deinen Code auf häufige Probleme:
Mehrere Optimierungsdurchläufe erzeugen schnelleren, kleineren Code.
Wertet konstante Ausdrücke zur Compile-Zeit aus.
Eliminiert redundante Berechnungen.
Entfernt unerreichbaren Code und unbenutzte Funktionen.
Ersetzt Kopien durch direkte Wertnutzung.
Ersetzt teure durch günstigere Operationen.
Lokale Optimierungen: Identity Ops, redundante Moves.
Inliniert kleine Funktionen zur Reduzierung des Call-Overheads.
Kleinerer Code = schnellere Ausführung = weniger Energie
Umfassende eingebaute Bibliotheken — keine externen Abhängigkeiten erforderlich.
Classes mit Vererbung, Konstruktoren, Destruktoren. Heap-Allokation mit new/dispose. super für Basisklassenaufrufe.
class extends für Single Inheritancenew ClassName(args) mit Konstruktordispose obj ruft Destroy()super.method() für BasisklasseLinux x86_64, Linux ARM64 und Windows x64 aus einem Codebase. Ein Compiler, drei Plattformen.
Vollständiges Import/Export mit Standard Library.