Befreit von Altlasten.
Das nächste Kapitel der Systemprogrammierung.

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.

Schnellstart

Starten Sie mit Lyx in wenigen Minuten.

TERMINAL
# 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

Keine LibC.
Keine Kompromisse.

Während andere Sprachen auf riesigen Standard-Bibliotheken aufbauen, spricht Lyx direkt mit dem Linux-Kernel und der Windows API. Cross-Compilation inklusive.

  • Linux x86_64 + ARM64 + Windows x64 Cross-Compilation
  • Direkte Syscall/WinAPI-Kommunikation
  • Vollständiges Module System mit std-Library
  • Minimaler Binary-Footprint (ab 4KB)
Binary Size Complexity
Andere (dynamisch gelinkt) ~800 KB
Lyx (statisch nativ) 4-42 KB

Kreuzkompilierung

Eine Codebasis, drei Plattformen. Lyx unterstützt Kreuzkompilierung für Linux x86_64, Linux ARM64 und Windows x64.

🐧

Linux x86_64

ELF64-Binary mit SysV ABI. Direkte Syscalls für maximale Leistung.

./lyxc app.lyx -o app
🍎

Linux ARM64

Für Raspberry Pi, Apple Silicon Linux, Cloud-Server. AAPCS64-Aufrufkonvention.

./lyxc app.lyx -o app --target=arm64
🪟

Windows x64

PE32+-Binary mit Windows-x64-Aufrufkonvention. Shadow Space + IAT.

./lyxc app.lyx -o app.exe --target=win64
Ziel Format Aufrufkonvention OS-Schnittstelle
linux ELF64 SysV ABI (RDI, RSI, RDX, RCX, R8, R9) Syscalls
arm64 ELF64 AAPCS64 (X0-X7) Syscalls
win64 PE32+ Windows x64 (RCX, RDX, R8, R9 + Shadow Space) kernel32.dll

Hinweis: Der --target-Parameter ist optional. Der Compiler wählt automatisch das Host-Betriebssystem als Ziel.

ARM64-Binaries auf x86_64 testen:

# QEMU installieren
sudo apt install qemu-user-static

# ARM64-Binary ausführen
qemu-aarch64-static ./program

Warum Lyx?

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.

Zero Dependencies

Echte Binär-Autarkie. Die meisten Sprachen verlassen sich auf die C-Standardbibliothek oder externe Linker. Lyx bricht mit dieser Tradition.

  • Direkte ELF64- und PE32+-Generierung
  • Keine libc-Bindung, direkte Syscalls
  • Single-Toolchain: nur lyxc benötigt
🔗

Externe Funktionen

Du bist nicht isoliert. Lyx unterstützt die Einbindung externer Bibliotheken, wenn du sie brauchst.

  • extern fn extern fn für libc/libm Integration
  • Linux .so und Windows .DLL Support
  • PLT/GOT für dynamisches Linking
  • Varargs: printf(fmt, ...)
🔒

Sicherheit durch Typisierung

Lyx ist keine lockere Skriptsprache. Es ist für Systeme gebaut, auf die man sich verlassen muss.

  • Keine impliziten Casts – Fehler im Keim erstickt
  • var, let, co, con Speicherklassen
  • Volle Kontrolle über Veränderbarkeit

Das Beste aus drei Welten

Lyx kombiniert die Stärken etablierter Sprachen zu etwas Neuem.

  • C — C — Die Macht der Systemprogrammierung
  • Rust — Rust — Sicherheitsansätze und strikte Typisierung
  • Pascal — Pascal — Klarheit und Lesbarkeit der Syntax

Datentypen

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
🔄

Typ-Umwandlung

Explizites Casting mit dem as Operator.

var f: f64 := 42 as f64;
var i: int64 := 3.14 as int64;

Nullable Typen

Pointer-Typen können mit ? nullable sein.

var p: pchar? := null;
var q: pchar := p ?? "fallback";

SIMD Arrays

parallel Array für vektorisierte Operationen.

var v: parallel Array<Int64>;
var sum := v + v; // SIMD

Einsatzgebiete

Was kann man mit Lyx entwickeln?

🖥️

Systemprogrammierung

Direkter Hardware-Zugriff, Treiber, Betriebssystem-Komponenten. Volle Kontrolle ohne Abstraktions-Overhead.

☁️

Cloud-Native

Minimale Container-Images, Microservices, Kubernetes-ready. Ultra-kleine Binaries für maximale Dichte.

🔌

Embedded Systeme

Minimaler Footprint ab 4KB, keine Runtime erforderlich. Perfekt für eingeschränkte Umgebungen.

📚

Bildung

Klare, lesbare Syntax inspiriert von Pascal. Perfekt zum Erlernen von Systemprogrammierungs-Konzepten.

MAIN.LYX
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;
}

Compiler Architecture

From source code to native executable in 8 stages

Source (.lyx)
Lexer → Token-Stream
Parser → AST
Sema → Scopes, Types
IR Lowering → 3-Address-Code
IR Optimizer → CSE, DCE, Copy Prop
Inlining → Function Inlining
Backend → Machine Code
Linux → ELF64
Windows → PE32+
Executable (no libc)

Standard-Bibliothek

Umfassende eingebaute Bibliotheken — keine externen Abhängigkeiten erforderlich.

std.math
Mathematical functions
Abs64, Min64, Max64, Sqrt64, Clamp64, Sign64, Lerp64, Map64, Sin64, Cos64, Hypot64, IsEven, IsOdd, NextPowerOfTwo
std.io
I/O functions
print, PrintLn, PrintIntLn, ExitProc, Printf
std.string
String manipulation
StrLength, StrCharAt, StrFind, StrToLower, StrToUpper, StrConcat, StrReplace
std.env
Environment API
ArgCount, Arg, init
std.time
Date and time
Numerical calculations, timezone support
std.geo
Geolocation
Decimal Degrees, GeoPoint, Distance, BoundingBox
std.fs
Filesystem operations
open, read, write, close, file existence
std.crt
ANSI Terminal
Colors, cursor control
std.pack
Binary serialization
VarInt, int/float/string packing
std.regex
Regex matching
Full regex engine included
std.qbool
Probabilistic Boolean
QBool, Maybe(), Observe(), Entanglement
std.vector
2D Vector library
Vec2
std.list
Collections
StaticList8, StackInt64, QueueInt64, RingBufferVec2
std.rect
Rectangle utilities
Rect
std.color
RGBA Color utilities
Color manipulation

Einfachheit ist das
höchste Maß an Perfektion.

v0.5.0 Feature

OOP — Vollständig

Classes mit Vererbung, Konstruktoren, Destruktoren. Heap-Allokation mit new/dispose. super für Basisklassenaufrufe.

  • class extends für Single Inheritance
  • new ClassName(args) mit Konstruktor
  • dispose obj ruft Destroy()
  • super.method() für Basisklasse
type
Dog = class extends Animal {
breed: pchar;
fn Create(n, b: pchar) {
self.name := n;
self.breed := b;
}
fn speak() {
PrintStr("Woof!\n");
}
};

Cross-Compilation

Linux x86_64, Linux ARM64 und Windows x64 aus einem Codebase. Ein Compiler, drei Plattformen.

Module System

Vollständiges Import/Export mit Standard Library.