Standard-Units Übersicht

Stand: 2026-08-12 · Verzeichnis: std/ · geprüft mit lyxc 1.0.21A

 
PrintF64 ist seit lyxc 1.0.17C ein Builtin (#1254, #1284) — kein Import nötig, auch nicht std.io. Es gibt sechs Nachkommastellen mit abschließendem Zeilenumbruch aus: PrintF64(1.25)1.250000. Die Ausgabe rundet sichtbar (3.141593.141589); für exakte Stellenzahl FloatToStr nehmen.

Ebenfalls in std.io: PrintFloatLn(x: f64) (mit Umbruch) und FloatToStr(val: f64, prec: int64) (Zeichenkette, etwa Print(FloatToStr(3.75, 2)) für Ausgabe ohne Umbruch).

Die Standardbibliothek von Lyx umfasst 421 Units (gezählt als .lyx-Dateien unter std/), davon 27 neue Mathematik-Units — siehe Rechnen — die Mathematik-Units. Die Tabelle unten fasst den größten Teil davon in 38 Kategorien; die restlichen sind einzelne Basis-Units ohne Gruppe (std.time, std.datetime, std.env, std.log, std.error, std.result, std.conv, std.units, std.country, std.geo, std.debug, std.meta_safe, std.strtype), die weiter unten einzeln aufgeführt sind. Sie folgt dem Prinzip Zero-External-Dependencies: Jede Unit ist entweder vollständig in Lyx implementiert oder wrappet direkt POSIX-Syscalls – ohne weitere Laufzeitbibliotheken als Pflichtabhängigkeit. Ausnahmen (OpenSSL, libssh2, mpg123, ALSA, Qt5) sind explizit dokumentiert und optional.

Weil der Namensraum flach ist — es gibt keinen qualifizierten Zugriff wie std.math.Clamp64 —, tragen die Funktionen einer Unit ein gemeinsames Präfix: std.db.sqliteSQLite*, std.net.socketTCP*/Socket*, std.stringStr*/Char*, std.pdf.builderPdf*. Eigene Units sollten demselben Muster folgen.

Kategorie Units Typischer Einsatz
I/O & Dateisystem 15 Speicher, mmap, Fehlerbehandlung, I/O, Signale, Scheduling, Threads, Prozesse, xattr
Datenstrukturen 4 Listen, Vektoren, Hash-Tabellen, Sortieren
Strings & Kodierung 18 Suchen, Ersetzen, UTF-8/Unicode, Normalisierung, Grapheme, JSON, XML, YAML, Regex, URLs
Mathematik & Wissenschaft 12 Geometrie, Statistik, SIMD, GPS, Farben
KI & Maschinelles Lernen 3 Regression, Clustering, FastText
Kryptografie 18 AES, HMAC-SHA256, SHA-256, ECDSA, sichere Zufallszahlen, MD5, SHA-1, X25519, SHA-3/SHAKE; PQC: ML-KEM, ML-DSA, SLH-DSA, Hybrid-KEM, DADQ
Graphdatenbank 7 In-Memory-Graph: Knoten, Kanten, Labels, TLV-Properties, Vektoren, Indizes, Datei-Persistenz, Graph-RAG
System & Kernel 7 io_uring, IPC, BPF, ptrace/perf, Namespaces, Capabilities, sysadmin
Terminal & UI 3 ANSI-Farben, Raw-Input, X11
Qt5-Bindings 5 Desktop-GUI, OpenGL, EGL
LyxVision (TUI-Framework) 20 Terminal-UI, Widgets, Dialoge
Netzwerk & Protokolle 33 HTTP, DNS, SMTP, MQTT, BGP, QUIC, DHCP, ARP, epoll, REST-Client, reine Frame-Builder (eth/ipv4/udp)
Datenbanken 5 MySQL, PostgreSQL, Redis, SQLite
Audio 4 WAV, MP3, ALSA-Wiedergabe
PDF-Bibliothek 24 PDF erstellen, lesen, Schriften, Sonderfarben, PDF/A
SVG-Bibliothek 11 Vektorgrafiken, Animationen, Filter, Parser
LFD-Binärformat 2 LFD-Dateien lesen und schreiben
Validierung 25 IBAN, EAN, ISIN, VIN, Personalausweis, Sozialversicherung
Hardware — Bluetooth 9 BLE, GATT, RFCOMM, Advertising, Mesh
Hardware — USB 13 Control/Bulk/Interrupt/ISO, typsichere EP-Wrapper, URB-Pool, Discovery
Hardware — GPIO 8 RPi4/BCM2711: MMIO-Direktzugriff, GPIO-v2 ioctl, SoftPWM, Edge-Detection
Hardware — PCI 12 Konfigurationsraum, ECAM, BARs, Capabilities, Enumeration, IRQs, VFIO/DMA, Port-I/O, pci.ids-Auflösung
Android 16 NDK, JNI, OpenGL ES, APK-Bau, Sensoren
Cloud — AWS 13 S3, EC2, DynamoDB, Lambda, IAM, SQS, SNS, CloudWatch, Secrets Manager
Cloud — DigitalOcean 13 Droplets, Volumes, Spaces, Databases, Kubernetes, Apps, Networking
Cloud — Cloudflare 16 Zones, DNS, Workers, KV, R2, D1, WAF, Cache, Pages, Tunnel, Email, Analytics
Cloud — GCP 11 Cloud Storage, Compute Engine, Firestore, Pub/Sub, Cloud Functions, Cloud Run, Logging, Monitoring, Secret Manager, IAM
KassenSichV 6 TSE-Anbindung (Mock, Cloud REST, USB-File), BSI TR-03153 QR-Code, DSFinV-K-Export
Archiv 4 ZIP lesen/schreiben, TAR (POSIX ustar) lesen/schreiben, RAR5 lesen, ISO 9660 lesen/schreiben
Blockchain 2 Transaktion, Block, Ledger, PoW-Konsens, P2P-Netzwerk
CPU & SIMD 2 CPU-Feature-Erkennung (SSE2/SSE4.1/AVX2), Runtime-Dispatch, 16-Byte-ausgerichtete f32-Arrays (WP-GPU-02, in Entwicklung)
Bildverarbeitung 9 Einheitliches Bild-Lade-API (GRF-08): BMP, PNG, JPEG, GIF, TIFF, WebP, AVIF; Format-Auto-Erkennung, RGBA-Pixel-Zugriff
Office-Dokumente 4 ODF-Dokumente erstellen: ODT-Texte (Absätze, Überschriften, Formatierung) und ODS-Tabellen (Sheets, Zellen)
Video 3 Video-Metadaten aus AVI (VID-01) und MP4/ISOBMFF (VID-02); Codec-Erkennung (H.264/H.265/AV1/VP8/VP9/MJPEG); MJPEG-Frame-Extraktion
OpenPGP 4 RFC 4880: ASCII-Armor kodieren/dekodieren, Paket-Iteration, Public-Key-Fingerprint und Key-ID extrahieren
EDI / EDIFACT 14 B2B-Datenaustausch: Bestellungen, Rechnungen, Lieferscheine, Zoll, Seefracht, Transport, Zahlungsverkehr
HL7 v2 5 Gesundheitswesen: MLLP-Framing, MSH/ACK-Engine, Patientenverwaltung (ADT), Aufträge (ORM/OML), Befunde (ORU/OUL), Terminplanung

Import-Syntax

Jede Unit wird einzeln importiert — eine import-Zeile pro Datei, die man braucht:

// Einzelne Unit
import std.io;
import std.math;

// Mehrere Units aus demselben Namespace: je eine Zeile
import std.net.http;
import std.net.dns;
import std.crypto.aes;

// LyxVision — mit std.-Präfix wie alle anderen
import std.lyxvision.app;
import std.lyxvision.button;

 
Es gibt keinen Wildcard- und keinen Namespace-Import. import std.audio.*; ist ein Parse-Fehler (expected IDENT, got *), und import std.net; meldet Modul nicht gefundenstd.net ist ein Verzeichnis, keine Unit. Frühere Fassungen dieser Seite zeigten beide Formen. Ein Punktpfad bezeichnet immer genau eine Datei: std.net.httpstd/net/http.lyx.

Nur importieren, was gebraucht wird. Jeder Import zieht die exportierten Symbole in den flachen Namensraum des Programms — und zwei Units, die denselben Namen exportieren, brechen die Übersetzung ab, noch bevor das Symbol überhaupt benutzt wird:

sema error: mehrdeutiges Symbol 'FileExists' — exportiert von 'std.fs' und 'std.fs_ext'

Bekannte Paare, die sich nicht vertragen: std.fs + std.fs_ext (FileExists, FileSize), std.math + std.ml (AbsF64, ExpF64, LogF64, SqrtF64) und std.cloud.s3 + std.datetime (DaysInMonthtransitiv über std.cloud.aws.transportstd.time, am Import nicht ablesbar). Einen Ausweg über Alias-Import oder qualifizierten Aufruf gibt es nicht — es hilft nur, eine der beiden Units wegzulassen oder den betroffenen Code in eine eigene Unit zu ziehen.

Vorkompilierte Units (*.lyu)

Units können mit dem Lyx-Compiler vorkompiliert werden. Das Ergebnis ist eine *.lyu-Datei (Lyx Unit, binär), die bereits in die interne Zwischendarstellung übersetzt wurde:

lyxc --compile-unit std/math/math.lyx
# erzeugt: std/math/math.lyu

Der Lauf führt den Codegen mit (#1587): schlägt er fehl, entsteht keine .lyu-Datei. Eine grüne Vorkompilierung belegt damit auch die Übersetzbarkeit, nicht nur die Semantik.

Beim Import sucht der Compiler automatisch nach der vorkompilierten Version:

  • *.lyu vorhanden → wird bevorzugt importiert (kein erneutes Parsen/Compilieren der Quelle)
  • nur *.lyx vorhanden → Quellcode wird beim Build direkt mitcompiliert

Die Standardbibliothek wird in der Regel mit fertigen *.lyu-Dateien ausgeliefert. Eigene Units bei häufiger Wiederverwendung ebenfalls vorkompilieren:

# Alle Units eines Projekts vorkompilieren
lyxc --compile-unit src/utils.lyx src/config.lyx src/protocol.lyx


Grundsystem

Kern-Units, die von fast allen anderen Units als Basis verwendet werden. In sicherheitskritischem Code (@flight_crit, @dal(A/B)) sind std.alloc und std.result die primären Bausteine für kontrollierte Ressourcen- und Fehlerbehandlung.

Unit Beschreibung
std.alloc Speicherverwaltung über mmap, ohne libc: alloc/free mit Kleinspeicher-Pool (bis 4 KB aus 1-MiB-Blöcken), dazu die C-nahe Familie malloc/calloc/realloc_mem/free_mem mit 8-Byte-Alignment
std.system Kern-Typen: Handle und FD als benannte int64-Aliases für OS-Handles und Dateideskriptoren
std.error POSIX-errno-Konstanten (1–133), GetErrorMessage, CheckSyscallError, GetSyscallErrorCode
std.result ResultInt64, ResultVec2, ResultBool, OptionInt64, OptionVec2; Unwrap/UnwrapOr/Expect/Map/AndThen für Fehlerbehandlung ohne Exceptions; 14 ERR_*-Codes; sichere Arithmetik (SafeAddSafeMod) und Array-Zugriffe. sichere Arithmetik mit Überlauf- und Nullprüfung
std.meta_safe Binäre Integritätsprüfung: CRC32 über Code-Pages aus /proc/self/exe; erkennt Modifikationen am Prozess-Image zur Laufzeit
std.mmap_ext Erweiterte Memory-Operationen: mremap, madvise (MADV_*), msync, memfd_create, mlock/munlock, mincore
std.inotify Dateisystem-Ereignisse via Linux inotify: InotifyCreate, InotifyWatch, InotifyRead; Event-Masken IN_CREATE, IN_MODIFY, IN_DELETE, IN_MOVED_*, IN_ALL_EVENTS
std.mqueue POSIX Message Queues: MqOpen, MqOpenWith, MqSend, MqTimedSend, MqRecv, MqTimedRecv, MqGetCurMsgs, MqUnlink

import std.alloc;
import std.result;

fn AllocBuffer(size: int64): ResultInt64 {
    var ptr := malloc_safe(size);
    if (ResultInt64IsErr(ptr)) {
        return ErrInt64(-1);
    }
    return ptr;
}

→ Details: Fehlerbehandlung – Result, Option, SafeArithmetic


I/O & Dateisystem

Vierzehn Units für Ein-/Ausgabe, Betriebssystem-Interaktion, nebenläufige Programmierung, Scheduling, Signale und IPC. std.io ist die am häufigsten importierte Unit in Lyx-Programmen.

Unit Beschreibung
std.io Ausgabefunktionen: Print, PrintLn, PrintFloatLn, PrintBool; IntToStr, FloatToStr, BoolToStr; Printf-Varianten für 1–4 Argumente
std.fs Datei-I/O über POSIX-Syscalls: FsOpen, FsRead, FsWrite, FsClose, FsDelete, FsExists, Pfad-Operationen
std.os Betriebssystem-Schnittstelle: Sleep, GetPID, GetEnv, GetCWD, Exec, MemInfo, Pfadprüfungen
std.env Umgebungsvariablen direkt aus dem Startstack (EnvLookupRaw, EnvBase, EnvEntryValueOff — Basis für std.os.env_get) und Kommandozeilenargumente im Format –key=value (ArgvGetStr)
std.process Prozessverwaltung: Fork, Exec, Spawn, Wait, Kill, Shell (Befehl als String ausführen)
std.thread POSIX-Threads: ThreadCreate, ThreadJoin; Mutex, Bedingungsvariablen, Thread-Local Storage, Shared Memory, Atomic-Operationen, CAS — → Detailseite
std.log Logging mit 5 Leveln (DEBUG…FATAL) über log_emit; Datei-Sink (log_set_file), Zeitstempel, Callback-Handler, JSON-Zeile log_info_kv. Seit 1.0.20F ein einheitlicher Ausgabeweg (#1437–#1442): Level-Filter, Datei-Sink, Callback und Farben wirken auch bei den Kurzfunktionen
std.fs_ext Erweitertes Datei-I/O: pread64, pwrite64, readv, writev, fstat, sendfile für High-Performance-I/O
std.pipe Pipes und Dateideskriptor-Duplikation: pipe, pipe2, dup, dup2, dup3
std.signals UNIX-Signal-Handling: sigaction, sigprocmask, signalfd, kill, tgkill
std.process_ext Prozess-Credentials: GetUID, GetGID, GetEUID, IsRoot, SetUID, SetGID, SetSID, SetPGID; Systeminfo via uname
std.sched Scheduling & CPU-Affinität: SchedYield, SchedSetAffinity, CpuSetAdd/Remove, GetPriority, SetPriority, GetCurrentCPU
std.inotify Dateisystem-Ereignisse (inotify): InotifyCreate, InotifyWatch, InotifyUnwatch, InotifyRead; Accessor-Funktionen für inotify_event-Felder
std.mqueue POSIX Message Queues (IPC): MqOpen/MqOpenWith, MqSend/MqTimedSend, MqRecv/MqTimedRecv, MqGetAttr, MqGetCurMsgs, MqUnlink
std.xattr Erweiterte Dateiattribute (xattr), Dateisystem-Statistik (StatFs, StatFsFreeBytes), Speicher-Vorabzuweisung (FileAllocate, Hole-Punching)

import std.io;
import std.fs;
import std.log;

fn main(): int64 {
    // Ausgabe
    PrintLn(StrConcat("Starte Programm", IntToStr(42)));

    // Datei lesen
    var fd := FsOpen("config.ini", FS_READ);
    var buf: [1024]uint8;
    var n := FsRead(fd, ^buf[0], 1024);
    FsClose(fd);

    // Logging (log_emit statt log_info — nur log_emit beachtet Level und Ziel)
    log_emit(LOG_LEVEL_INFO, "Konfiguration geladen");
    return 0;
}


Zeit

Zwei komplementäre Units: std.time für Zeitwerte und hochauflösende Messungen, std.datetime für menschenlesbare Formatierung und Parsing.

Unit Beschreibung
std.time Kalenderrechnung (DateFromYmd, DayOfWeekFromDate, IsLeapYear), Uhrzeit aus sechs Systemuhren (Now, GetTimeNs), Warten (Sleep, SleepNs, SleepUntil) und Kernel-Timer über fd (TimerFd*, epoll-tauglich). Zeitkonstanten mit Einheit im Namen (MS_SECOND, US_DAY, NS_PER_SEC). Zonen: Zeitzonen-Tabelle mit 117 Versätzen
std.datetime Formatierung (ISO 8601, RFC 2822, relative Zeitangaben) und Parsing von Datums-/Zeitstrings; FormatDate, ParseDate

import std.time;
import std.datetime;
import std.io;

fn Benchmark() {
    var start := TimeNowMicros();
    HeavyComputation();
    var elapsed := TimeNowMicros() - start;
    PrintLn(StrConcat(StrConcat("Dauer: ", IntToStr(elapsed)), " µs"));
}

fn LogTimestamp() {
    // FormatDate schreibt "JJJJ-MM-TT" in einen eigenen Puffer und
    // liefert die Zahl der geschriebenen Zeichen (10).
    var buf: pchar := alloc(32) as pchar;
    FormatDate(2026, 8, 19, buf);
    Print(buf);                          // "2026-08-19"
}


Strings & Textverarbeitung

Zehn Units für alle Aspekte der Textverarbeitung – von einfachen String-Operationen über UTF-8 und Unicode bis zu URL-Parsing und Base64-Kodierung.

Zeichenketten-Ebenen

Vier Ebenen, aufeinander aufbauend. Man importiert nur, was man braucht — die Unicode-Tabellen sind groß und deshalb bewusst ausgelagert.

Unit Ebene Beschreibung
std.string pchar Operationen auf rohen, NUL-terminierten C-Strings
std.strtype Bytes String: besitzende, längentragende Zeichenkette (libc-frei, NUL-Bytes erlaubt)
std.text Codepoints Text: validiertes UTF-8 — Zählen, Schneiden, Suchen, Splitten nach Codepoints; UTF-16 an der Grenze
std.unicode Unicode Normalisierung NFC/NFD/NFKC/NFKD, normalisierendes Vergleichen, Unicode-Whitespace, Groß-/Kleinschreibung bis Latin-1
std.unicode_case Unicode Vollständige einfache Groß-/Kleinschreibung (Griechisch, Kyrillisch, …) und caseless Vergleichen
std.grapheme Grapheme Graphem-Cluster nach UAX #29 — „was der Nutzer als ein Zeichen sieht„

Dazu drei generierte Datenunits, die nicht direkt importiert werden: std.unicode_data (Normalisierung), std.unicode_casedata (Groß-/Kleinschreibung), std.unicode_gbdata (Graphem-Grenzen).

Weitere Textverarbeitung

Unit Beschreibung
std.string String-Operationen: StrFind, StrCmp, StrReplace, StrTrim, StrSplit, StrJoin, StrToUpper/StrToLower, StrFormat, StrToInt64; StringBuilder zum Zusammensetzen (mit new erzeugen). StrLen, StrConcat, StrCopy und StrSub sind Builtins, kein Import nötig
std.regex Reguläre Ausdrücke (Backtracking): Klassen, Quantoren inkl. {n,m}, Anker, Alternation, verschachtelte Gruppen; RegexSearch, RegexSearchSpan, RegexFindAll, RegexReplaceInto. Seit 1.0.20F vollständig (#1466–#1468, #1378); RegexReplace liefert die Anzahl, den Text gibt RegexReplaceAlloc
std.html HTML-Escape/Unescape, Tag-Erkennung, StripTags, Validierung der Tag-Balance
std.url URL-Parsing nach RFC 3986: Schema, Host, Pfad, Query-Parameter; Prozent-Kodierung, UrlBuild
std.base64 Base64-Kodierung/Dekodierung (Standard und URL-Safe), Basic-Auth-Header, Data-URLs

import std.string;
import std.regex;

fn ExtractVersion(input: pchar): pchar {
    // Suche nach "v1.2.3"-Muster
    var match := RegexSearch(input, "v([0-9]+\\.[0-9]+\\.[0-9]+)");
    if (match.found) {
        return match.group[1];   // Capture-Gruppe 1
    }
    return "unbekannt";
}

fn Normalize(s: pchar): pchar {
    return s |> StrTrim() |> ToLower();
}


Datenformate

Vier Units zum Lesen und Schreiben strukturierter Dateiformat – JSON und YAML für Web/Config, XML für Legacy-Systeme und Protokolle, INI für einfache Konfigurationsdateien.

Unit Beschreibung
std.json JSON-Parser und -Serialisierer: JsonParse, JsonGet, JsonSet, JsonToStr; alle JSON-Typen (Objekt, Array, String, Zahl, Bool, null)
std.xml XML-Parser und -Generator: Elemente, Attribute, Namespace, Pretty-Print, Basis-Validierung
std.yaml YAML-Parser: Skalare, Sequenzen, Maps; pfadbasierter Zugriff (YamlGetPath), Datei-Load/Save
std.ini INI-Konfigurationsdateien: Sektionen, typisierte Getter (IniGetStr, IniGetInt, IniGetBool), Datei-Load/Save

import std.ini;
import std.io;

fn LoadConfig(): int64 {
    var cfg := IniLoad("config.ini");
    var port   := IniGetInt(cfg,  "server", "port",    8080);
    var host   := IniGetStr(cfg,  "server", "host",    "localhost");
    var debug  := IniGetBool(cfg, "app",    "debug",   false);
    Print(host + IntToStr(port));
    return 0;
}


Datenstrukturen & Algorithmen

Acht Units für Kernalgorithmen und Low-Level-Datenoperationen. Alle Units in dieser Kategorie sind vollständig in Lyx implementiert – keine externen Abhängigkeiten.

Unit Beschreibung
std.buffer Binärsichere Byte-Puffer ohne eigene Allokation: BufferCopy, BufferFill, BufferFind, BufferReverse, BufferEquals, Hex-Umwandlung in beide Richtungen, Kapazitätsrechner
std.list Datenstrukturen für int64 und Vec2: dynamische Liste, StaticList (Stack-alloziert), Stack, Queue, RingBuffer
std.hash Hash-Funktionen: FNV1a, MD5, SHA-256, SHA-3 (256/512), BLAKE3; Passwort-Hashing: bcrypt, Argon2, scrypt
std.sort QuickSort für int64-Felder (Median-of-Three-Pivot, Insertion-Sort unter 10 Elementen); #1458 behoben und nachgeprüft
std.stats Statistik über int64-Felder: ArraySum/Min/Max/Avg/Median/Variance/StdDev, Suchen und Zählen. Achtung: die Map*-Aggregate liefern immer 0 (#1491); nicht gemeinsam mit std.math importierbar (#1492)
std.stats_batch Batch-Statistik für 4 oder 8 direkt übergebene Werte (ohne Array-Allokation, SIMD-freundlich)
std.pack Binäres Serialisieren/Deserialisieren: Int8–64 (little-endian), ZickZack-VarInt, Bool, IEEE-754-Fließkomma, String mit Längenpräfix, Null-Marker, Array-Header. Seit 1.0.20F stimmt VarIntSize mit WriteVarInt überein, auch ab 2^62 (#1501)
std.zlib DEFLATE/zlib-Kompression (RFC 1950/1951): Compress, Decompress, LZ77, Adler-32, CRC32
std.gzip gzip-Container (RFC 1952) über DEFLATE: GzipCompress, GzipDecompress, GzipCompressBound; prüft CRC-32/ISIZE, liest mehrere Member
std.brotli Brotli (RFC 7932): BrotliDecompress (vollständig), BrotliCompress (Store-Modus); kein std.zlib-Aufruf, keine externen Abhängigkeiten
std.zstd Zstandard (RFC 8878): ZstdDecompress (vollständig, FSE+Huffman), ZstdCompress (Store-Modus, Raw-Blöcke à 128 KB); Frame enthält Content Size

Archiv

Vier Units zum Lesen und Schreiben von Archivformaten. ZIP und TAR unterstützen sowohl Lesen als auch Schreiben; RAR5 ist wegen der proprietären Kompression nur lesbar; ISO 9660 liest den vollständigen Verzeichnisbaum und schreibt Flat-Root-Images.

Archiv-Übersicht

Unit Beschreibung
std.zip ZIP lesen (stored + deflated) und schreiben (automatische Methode); max. 4096 Einträge, kein ZIP64
std.tar TAR lesen und schreiben (POSIX ustar); keine Kompression — mit std.zlib für .tar.gz kombinieren
std.rar RAR5 lesen (nur stored-Einträge); kein Writer — RAR-Erstellung erfordert RARLAB-Lizenz
std.iso ISO 9660 Level 1 lesen (BFS, vollständige Pfade, max. 256 Verz.) und schreiben (Flat-Root, Name-Normalisierung)

import std.zip;

fn ZipRoundtrip(): void {
    // Schreiben
    var w: int64 := ZipWriterNew();
    ZipWriterAdd(w, "hello.txt"c, "Hallo!"c as int64, 6);
    ZipWriterSave(w, "test.zip"c);
    ZipWriterFree(w);

    // Lesen
    var z: int64 := ZipOpen("test.zip"c);
    var buf: int64 := alloc(ZipUncompSize(z, 0) + 1);
    ZipRead(z, 0, buf, ZipUncompSize(z, 0));
    PrintLn(buf as pchar);
    free(buf, ZipUncompSize(z, 0) + 1);
    ZipClose(z);
}


import std.list;
import std.sort;
import std.stats;

fn AnalyzeSamples() {
    var buf: [64]int64;
    // … Werte befüllen …
    QuickSort(buf, 64);
    PrintFloat(Avg(buf, 64));
    PrintFloat(Median(buf, 64));
    PrintFloat(StdDev(buf, 64));
}


Geometrie & Grafik

Sieben Units von 2D-Vektormathematik über GPS-Koordinaten bis zum direkten X11-Fensterzugriff.

Unit Beschreibung
std.vector Ganzzahlige 2D-Vektoren (Vec2): Vec2Add/Sub/Mul, Vec2Dot/Cross, Längen und Abstände, Vec2Normalize (Festkomma 1e6), Vec2Lerp, feste Drehungen. Seit 1.0.20F alle korrekt (#1476, #1477); Winkel werden in Mikrograd übergeben
std.vector_batch Batch-Operationen auf Vec2-Arrays: Summe, Skalierung, Normalisierung (SIMD-optimiert)
std.rect Achsenparallele Rechtecke aus zwei Vec2-Ecken: Maße, Ecken, Kanten, RectUnion/RectIntersect, RectInflate/Deflate, RectExpand, Clamping. Achtung: RectContains/ContainsInclusive verhalten sich umgekehrt zum Namen (#1479), RectCorners liefert Nullvektoren, RectDistanceToPoint misst Manhattan (#1480)
std.circle Kreise (Mittelpunkt + Radius): Lagebeziehungen, Abstände, Bounding-Rechteck; dazu Zahlenbereiche Range und Range2D. Achtung: CircleArea liefert 0 (#1489), CircleUnion verschiebt den Mittelpunkt nicht (#1490)
std.color RGBA-Farben als vier int64-Kanäle (0–255): 14 Vorgabefarben, ColorBlend, ColorLerp (Promille), ColorBrighten/Darken/Saturate/Grayscale, Hex-Umrechnung. Hinweis: Sättigung und Helligkeit von ColorFromHSL laufen über 0..255, nicht Prozent (#1484); für Alpha 0 ColorFromHexARGB statt ColorFromHex (#1485)
std.geo Geokoordinaten in Mikrograd: Parsen/Formatieren, Gültigkeitsprüfung, Mittelpunkte, GeoBBox-Rechtecke, DMS-Eingabe. Seit 1.0.20F stimmen die Entfernungen (#1481–#1483): Berlin–Hamburg 255 775 m statt vorher 437 128 m
std.x11 X11-Fenster-System (direkte Xcb/Xlib-Syscalls): Display öffnen, Fenster erstellen, Zeichnen, Tastatur-/Mausereignisse

import std.vector;
import std.geo;
import std.io;

fn PathLength(points: [16]Vec2, count: int64): f64 {
    var total: f64 := 0.0;
    for i := 1 to count - 1 do {
        var d := Sub(points[i], points[i - 1]);
        total := total + Length(d);
    }
    return total;
}

fn DistanceKm(lat1: f64, lon1: f64, lat2: f64, lon2: f64): f64 {
    return GeoHaversine(lat1, lon1, lat2, lon2);   // in Metern / 1000
}


Terminal

Zwei Units für die direkte Terminal-Steuerung: std.crt für Ausgabe mit ANSI-Farben und Cursor-Kontrolle, std.crt_raw für zeichenweises non-blocking Lesen im Raw-Modus.

Unit Beschreibung
std.crt Terminal-Ausgabe: ANSI-Farben (16 Vordergrund-/Hintergrundfarben), Cursor-Positionierung, Bildschirm löschen, CrtGoto, CrtSetColor
std.crt_raw Roh-Terminal-I/O: Raw-Modus via tcgetattr/tcsetattr, zeichenweises non-blocking Lesen, Escape-Sequenz-Erkennung

import std.crt;

fn PrintHeader(title: pchar) {
    CrtSetColor(CRT_GREEN, CRT_BLACK);
    CrtGoto(1, 1);
    Print(title);
    CrtSetColor(CRT_DEFAULT, CRT_DEFAULT);
}

→ Für vollständige TUI-Anwendungen: LyxVision-Framework


Audio

Vier Units für Audio-Verarbeitung und -Wiedergabe. std.audio.alsa und std.audio.mpg123 setzen die entsprechenden Systembibliotheken voraus.

Unit Abhängigkeit Beschreibung
std.audio keine Audio-Basis: AudioInfo-Typ, WAV-Parser, WAV-Schreiben, PCM-Format-Konvertierung, MP3-Header-Erkennung
std.audio.alsa libasound ALSA-Soundkarte: direkte PCM-Wiedergabe und Aufnahme über Kernel-Interface, Buffer-Konfiguration
std.audio.mpg123 libmpg123 MP3-Dekodierung via mpg123-Bibliothek, Stream-basiert, automatisches Resampling
std.audio.playback aplay/ALSA Vereinfachte WAV-Wiedergabe: PlayWav(filename) ohne manuelle ALSA-Konfiguration

import std.audio.playback;

fn PlayNotification() {
    PlayWav("assets/notify.wav");
}


Kryptografie

Sechs Units für kryptografische Grundoperationen: Verschlüsselung, Hashing, digitale Signaturen und sichere Zufallszahlen. Für TLS/HTTPS-Verbindungen wird OpenSSL via std.net.tls genutzt.

Unit Beschreibung
std.crypto.aes AES-128/256 im CBC-Modus: AES128CBCEncrypt, AES128CBCDecrypt, AES256CBCEncrypt, AES256CBCDecrypt; PKCS#7-Padding, IV-basiert
std.crypto.sha256 SHA-256 (FIPS 180-4): SHA256 (32-Byte-Digest), SHA256Hex (64-Zeichen-Hex), SHA256Str; für Signaturen und Datenintegrität
std.crypto.ecc secp256k1 ECDSA: ECCGenKey, ECCPubFromPriv, ECDSASign, ECDSAVerify; Bitcoin/Ethereum-Kurve, Little-Endian-Puffer
std.crypto.rand Sichere Zufallszahlen via getrandom(2): RandBytes, RandBytesExact, RandInt64, RandU32; kein /dev/urandom-FD nötig
std.crypto.hmac HMAC-SHA256 (RFC 2104): HMAC_SHA256 (32-Byte-MAC), HMAC_SHA256_Hex; Integrität + Authentizität; Encrypt-then-MAC mit AES-CBC
std.crypto.md5 MD5 (RFC 1321): MD5, MD5Hex (32-Zeichen Lowercase-Hex); Legacy-Einsatz (Prüfsummen, HTTP Digest Auth)
std.crypto.sha1 SHA-1 (160-Bit-Hash): SHA1, SHA1MySQLNativePassword; Legacy-Einsatz (MySQL mysql_native_password, Git-Objekt-IDs)
std.crypto.x25519 X25519 Diffie-Hellman (Curve25519, RFC 7748): X25519KeyGen, X25519SharedSecret, X25519; constant-time Montgomery-Leiter; PK/SK/SS je 32 Byte
std.crypto.keccak Keccak-f[1600] / SHA-3 (FIPS 202): SHA3_256, SHA3_512, SHAKE128, SHAKE256 (XOF); Low-Level: KeccakInit, KeccakAbsorb, KeccakSqueeze
std.crypto.ct Constant-Time Utilities: CTSelect, CTMemEqual, SecureZero, CTBarrettReduce, CTMontgomeryReduce; Schutz vor Timing-Angriffen
std.crypto.ntt NTT-Polynomring-Arithmetik für ML-KEM (q=3329) und ML-DSA (q=8380417): KyberNTT, DilithiumNTT, KyberPolyMul u. a. — interne PQC-Implementierungseinheit
std.crypto.pqc Post-Quantum High-Level API: PQCKeyGen, PQCEncapsulate, PQCDecapsulate, PQCSign, PQCVerify; Fassade über alle FIPS-203/204/205-Units
std.crypto.pqc.mlkem ML-KEM (CRYSTALS-Kyber, FIPS 203): MLKEMKeyGen, MLKEMEncapsulate, MLKEMDecapsulate; k=2/3/4 für 512/768/1024; ersetzt ECDH
std.crypto.pqc.mldsa ML-DSA (CRYSTALS-Dilithium, FIPS 204): MLDSAKeyGen, MLDSASign, MLDSAVerify; level=44/65/87; ersetzt ECDSA
std.crypto.pqc.slhdsa SLH-DSA (SPHINCS+, FIPS 205): SLHDSAKeyGen, SLHDSASign, SLHDSAVerify; SHA-256-basiert; PK nur 32 B
std.crypto.pqc.hybrid Hybrid-KEM (X25519+ML-KEM-768): HybridKEMKeyGen, HybridKEMEncapsulate, HybridKEMDecapsulate; Signal/Apple PQ3-Schema
std.crypto.pqc.dadq DADQ-SYM (symmetrisches Authenticated Cipher, experimentell): dadqFOEnc, dadqFODec (FO-Modus); Latin-Square Z₂₅₆, 128-Bit Quantensicherheit (Grover)

→ Übersicht: std.crypto Paket · PQC-Kategorie: std.crypto.pqc · Stärkere Hash-Funktionen und Passwort-Hashing: std.hash


System & Kernel

Sieben Units für Linux-Kernel-Schnittstellen: asynchrones I/O, Inter-Prozess-Kommunikation, Tracing, BPF-Programme, Namespaces, Capabilities und System-Administration.

Unit Beschreibung
std.io_uring Asynchrones I/O (Kernel 5.1+): IoUringCreate, IoUringGetSQE, IoUringSubmit, IoUringWaitCQE; Read/Write/NOP-SQEs; SINGLE_MMAP
std.ipc_sysv SysV IPC: Shared Memory (ShmCreate/Attach/Detach/Delete), Semaphore (SemWait/Post), Message Queues (MsgSend/Recv)
std.bpf eBPF: BpfMapCreate, BpfMapLookup/Update/Delete, BpfProgLoad, BpfInsn, BpfEmitRaw; Maps (Hash, Array, Ringbuf), Programme (XDP, kprobe). Braucht CAP_BPF oder root — ohne Rechte scheitert schon das Anlegen einer Map mit EPERM
std.debug Debugging & Performance: ptrace (PtraceAttach, PtracePeek/Poke, PtraceGetRegs), perf_event_open (PerfCount, PerfRead)
std.ns Namespaces & pidfd: PidFdOpen, PidFdSendSignal, PidFdGetFd, NamespaceUnshare, NamespaceJoin; CLONE_NEW*
std.security_ext Capabilities & prctl: ProcessSetName, ProcessSetNoNewPrivs, CapGet, CapSet, CapDrop, CapIsSet; ArchGetFs/Gs
std.sysadmin Systemverwaltung (root): Mount, Umount, Chroot, SetHostname, SyncAll, Reboot; MS_*-Flags

Datenbanken

Fünf Units für direkte Datenbankverbindungen ohne ORM-Schicht. Alle Protokolle sind nativ in Lyx implementiert — keine externen Client-Bibliotheken erforderlich (Ausnahme: std.db.sqlite via libsqlite3).

Unit Port Beschreibung
std.db.mysql 3306 MySQL/MariaDB-Client über Protokoll 41 (TCP): Verbindungsaufbau, Abfragen, Prepared Statements, Ergebnis-Iteration
std.db.postgres 5432 PostgreSQL-Client (Frontend/Backend Protocol v3, ohne libpq): Verbindungsaufbau, Abfragen, Ergebnis-Iteration
std.db.redis 6379 Redis-Client via RESP-Protokoll (voll): Strings, Lists, Hashes, Sets, Sorted Sets, Pub/Sub, Expire, Pipelining
std.db.redis_simple 6379 Redis-Client (minimal): nur GET/SET/DEL/EXPIRE — für eingeschränkte Umgebungen ohne std.string-Abhängigkeit
std.db.sqlite SQLite3 FFI-Bindings via libsqlite3: Verbindung, Abfragen, Prepared Statements, Ergebnis-Iteration

Graphdatenbank

In-Memory-Graphdatenbank ohne externe Abhängigkeiten. Nodes + Kanten mit typisierten Properties, f64-Embedding-Vektoren, drei Indizes (temporal, typ-basiert, Vektorähnlichkeit) und Graph-RAG-Funktion für KI-Kontext-Retrieval.

Unit Beschreibung
std.graphdb In-Memory-Graph: Nodes, Kanten, Labels, TLV-Properties, Vektoren, Indizes, Datei-Persistenz, Graph-RAG

import std.db.mysql;

fn GetUserCount(): int64 {
    var conn := MysqlConnect("localhost", "app", "secret", "mydb");
    var result := MysqlQuery(conn, "SELECT COUNT(*) FROM users");
    var count := MysqlGetInt(result, 0, 0);
    MysqlClose(conn);
    return count;
}


Mathematik

Drei Grund-Units — und darüber 27 Units fürs eigentliche Rechnen, die 2026-08 dazugekommen sind: exakte Brüche, große Zahlen, genaue Elementarfunktionen, lineare Algebra, Signalverarbeitung, Graphalgorithmen.

<WRAP info> Rechnen — die Mathematik-Units führt alle 27 mit Schichtengraph, Prüfverfahren und den drei bekannten Vorbehalten. Wer eine bestimmte Rechenaufgabe hat, fängt dort an. </WRAP>

Grundfunktionen

Unit Beschreibung
std.math Ganzzahl-Mathematik (Abs64, Clamp64, Sqrt64, Pow64, Lerp64, Map64, Log2), Zahlentheorie (GCD, LCM, IsPrime, PopCount, NextPowerOfTwo) und f64-Mathematik (SqrtF64, SinF64, CosF64, AtanF64, Atan2F64, Log2F64). Seit 1.0.20F korrekt (#1444–#1450); Sin64/Cos64 rechnen in Mikrograd, Round64 heißt jetzt RoundF64
std.math_batch Batch-Min/Max/Clamp für 4 oder 8 Argumente gleichzeitig – ohne Array-Overhead, SIMD-freundlich
std.math.constants Typisierte mathematische Konstanten: π, e, √2, φ (Goldener Schnitt), Tau; Grad-/Radiant-Konvertierung

import std.math;
import std.math.constants;

fn CircleArea(r: f64): f64 {
    return PI * r * r;
}

fn NormalizeAngle(deg: f64): f64 {
    return Clamp(deg, 0.0, 360.0) |> DegToRad();
}

Die 27 Rechen-Units

Gruppe Units
Zahldarstellung std.i128 · std.bignum · std.rat · std.money · std.sat
Bitebene std.bits · std.feq
Analysis std.mathx · std.complex · std.numeric · std.sum
Lineare Algebra std.linalg · std.decomp · std.sparse · std.tensor · std.quat
Signalverarbeitung std.fft · std.convolve · std.wavelet
Diskretes std.graph · std.grid · std.modmath · std.prime
Anwendung std.prob · std.dist · std.autodiff · std.crypto.ec
 
PopCount und RotateLeft32 sind repariert. Beide waren fehlerhaft (#1545, #1546) und sind es seit 1.0.20E nicht mehr — nachgemessen. std.bits bringt mit BitsRotlN (beliebige Breite) und den Bitmengen samt Rank/Select trotzdem mehr mit.

Netzwerk & Protokolle

26 Units in vier Gruppen: Transportschicht (Sockets, TLS, epoll), Anwendungsprotokolle, Verzeichnisdienste und Netzwerk-Management. Die Units bauen aufeinander auf: HTTP nutzt Socket, HTTPS nutzt TLS, REST-Client baut auf HTTP + HTTPS auf.

Unit Gruppe Beschreibung
std.net.socket Transport TCP, UDP, Unix, Raw-Sockets, ICMP, ARP; Poll, Select für non-blocking I/O
std.net.types Transport Socket-Adresstypen (SockAddr4, SockAddr6), IP-Hilfsfunktionen (ParseIPAddr, IPv4ToStr)
std.net.tls Transport TLS/SSL-Verbindungen (via OpenSSL): Handshake, Zertifikat-Prüfung, Lesen/Schreiben
std.net.syscalls Transport Portable POSIX-Socket-Syscall-Wrapper (unterste Schicht; selten direkt verwendet)
std.net.epoll Transport epoll I/O-Multiplexing: epoll_create1, epoll_ctl, epoll_wait, eventfd2
std.net.dns Protokolle DNS-Auflösung: A, AAAA, MX, NS, TXT, SOA, SRV, CAA, DNSKEY, DS, PTR
std.net.http Protokolle HTTP/1.1-Client: GET, POST, PUT, DELETE; Header, Chunked-Transfer, Redirect-Follow
std.net.https Protokolle HTTPS-Client (baut auf std.net.tls auf); identische API wie std.net.http
std.net.rest Protokolle Session-basierter REST-Client: Base-URL, Bearer/API-Key-Auth, JSON-Shortcuts, Query-Builder
std.net.smtp Protokolle SMTP-Mailversand (Ports 25/587/465): vollständiger Dialog, STARTTLS, AUTH LOGIN
std.net.imap Protokolle IMAP4rev1-Postfachzugriff: SELECT, LIST, FETCH, SEARCH, tagged Responses
std.net.ssh Protokolle SSH-Verbindung: Passwort- und Key-Auth, Remote-Befehlsausführung, Output-Capture
std.net.mqtt Protokolle MQTT 3.1.1: Connect, Publish, Subscribe, QoS 0/1/2 – für IoT-Geräte
std.net.ntp Protokolle NTP v3: Zeitabfrage via UDP Port 123, Offset-Berechnung
std.net.quic Protokolle QUIC (RFC 9000): UDP-basiert, TLS 1.3 integriert, Grundlage für HTTP/3-Transport
std.net.sip Protokolle SIP (RFC 3261): REGISTER, INVITE, OPTIONS; 1xx–6xx-Statusklassen (VoIP)
std.net.telnet Protokolle Telnet (RFC 854): Option-Negotiation, Legacy-Gerätekommunikation (Switches, PLCs)
std.net.whois Protokolle WHOIS (RFC 3912): Auto-Routing zu Registry-Servern (.com/.de/.eu/IP)
std.net.ldap Verzeichnis LDAP (RFC 4511): Bind, Search, Modify, Add, Delete, SASL-Auth (Active Directory / OpenLDAP)
std.net.bgp Routing BGP-4 (RFC 4271): FSM IDLE→ESTABLISHED, AS-Routing, UPDATE-Messages, Path-Attribute
std.net.snmp Management SNMPv1/v2c: OID-basierter Geräteparameter-Zugriff (GET/SET/WALK)
std.net.asn1 Management ASN.1/BER-Encoding für SNMP-PDUs (interne Hilfsbibliothek, selten direkt verwendet)
std.net.mongo Datenbank MongoDB Wire Protocol: BSON-Dokumente, Insert/Find/Update/Delete, SCRAM-SHA-1-Auth
std.net.internal.syscalls_linux Intern Linux-spezifische Socket-Syscall-Wrapper — wird automatisch von std.net.syscalls gezogen
std.net.internal.syscalls_android Intern Android-spezifische Socket-Syscall-Wrapper (ARM64/x86_64)
std.net.internal.types Intern Interne Networking-Typ-Aliases — nicht direkt importieren

import std.net.https;
import std.json;

fn FetchWeather(city: pchar): f64 {
    var resp := HttpsGet("api.example.com", StrConcat("/weather?city=", city));
    var data := JsonParse(resp.body);
    return JsonGetFloat(data, "temperature");
}


Validierung

25 Units für Prüfziffern und internationale Identifikationsnummern. Alle Units folgen dem gleichen Muster: Normalisierung → Validierung → Fehlercode. Keine externen Abhängigkeiten — vollständig in Lyx implementiert.

→ Details: std.validate Übersicht

Basis

Grundlegende Funktionen:

Unit Beschreibung
std.validate.ean EAN-8/13/14, UPC-A Barcode-Validierung mit Prüfziffer-Berechnung und Länder-Präfix-Erkennung
std.validate.iban IBAN-Validierung (Mod-97-Algorithmus, 30+ Länder), Bankleitzahl- und Kontonummer-Extraktion
std.validate.isbn ISBN-10/13-Validierung, bidirektionale Konvertierung (10↔13), ISSN-Support
std.validate.luhn Luhn-Algorithmus: Kreditkarten (Typ-Erkennung: Visa/MC/Amex/…), IMEI, deutsche Steuer-ID
std.validate.vat EU-Umsatzsteuer-ID-Validierung für alle 26 EU-Mitgliedstaaten (Muster + Prüfziffer)

Deutsche Nummern

Validierungsfunktionen für deutsche Nummernformate:

Unit Beschreibung
std.validate.de_personal MRZ, Steuer-ID, Rentenversicherungsnummer (RVNR), eGK-Versichertennummer
std.validate.de_numbers PZN (Arzneimittel), WKN (Wertpapiere), AGS (Gemeindeschlüssel), Zählpunktbezeichnung

Internationale Wertpapiere & Finanz

Finanz- und Wertpapiervalidierungen:

Unit Beschreibung
std.validate.isin ISIN (ISO 6166) — weltweite Wertpapierkennung, Luhn auf erweiterter Ziffernkette
std.validate.lei LEI (ISO 17442) — Legal Entity Identifier, Mod-97 wie IBAN
std.validate.bic BIC/SWIFT-Code (ISO 9362) — strukturelle Bankidentifikation
std.validate.us_cusip CUSIP — US/kanadische Wertpapierkennung, gewichtetes Mod-10

Fahrzeuge & Transport

Validierungen für Fahrzeug- und Transportidentifikatoren:

Unit Beschreibung
std.validate.vin VIN/FIN (FMVSS 565, ISO 3779) — Fahrzeugidentifikationsnummer, Mod-11
std.validate.iso6346 ISO 6346 — Schiffscontainer-Nummer, Zweierpotenzen Mod-11
std.validate.uic UIC-Fahrzeugnummer — Eisenbahnfahrzeuge, Luhn Mod-10
std.validate.iata IATA-Ticketnummer und Air Waybill — Mod-7
std.validate.mmsi MMSI — Seefunk-Identifikation, ITU MID strukturell

Wissenschaft & Publikationen

Validierungen für wissenschaftliche Identifikatoren:

Unit Beschreibung
std.validate.issn ISSN (ISO 3297) — Zeitschriften, Mod-11
std.validate.ismn ISMN (ISO 10957) — Notendrucke, EAN-13-Profil Präfix 9790
std.validate.isrc ISRC (ISO 3901) — Tonaufnahmen, strukturell CC-XXX-YY-NNNNN
std.validate.orcid ORCID iD — Wissenschaftler-ID, ISO/IEC 7064 MOD 11-2
std.validate.cas CAS-Nummer — chemische Verbindungen, rechtsseitig gewichtetes Mod-10

Länderspezifisch

Länderspezifische Validierungen:

Unit Beschreibung
std.validate.nl_bsn NL BSN (Burgerservicenummer) — 9-Proef Mod-11
std.validate.ch_ahv CH AHV-Nummer — EAN-13 Mod-10, Präfix 756
std.validate.us_ssn US SSN (Social Security Number) — strukturell, bekannte Muster ausgeschlossen
std.validate.ewc EWC/AVV-Abfallschlüssel — EU-Abfallkatalog, strukturell

import std.validate.iban;
import std.validate.vin;
import std.io;

fn ValidatePayment(iban_str: pchar, card: pchar): bool {
    var norm: pchar := IBANNormalize(iban_str);
    if (IBANValidate(norm) != IBAN_OK) {
        Print("Ungültige IBAN");
        return false;
    }
    if (LuhnValidate(card) != LUHN_OK) {
        Print("Ungültige Kartennummer");
        return false;
    }
    return true;
}


KI & Maschinelles Lernen

Drei Units für ML-Algorithmen, Worteinbettungen und probabilistische Logik. Alle vollständig in Lyx implementiert – kein Python, kein TensorFlow.

Unit Beschreibung
std.ml ML-Kern: lineare Regression, logistische Regression, KNN, K-Means, Naive Bayes; Normalisierung (MinMax, Z-Score); Metriken (MSE, MAE, R², Accuracy)
std.ml_full ML-Vollversion: alle std.ml-Algorithmen plus Entscheidungsbäume (Gini/Entropy/Chi²), Random Forest, Gradient Boosting, SVM (linear)
std.fasttext FastText-Worteinbettungen: Skip-gram/CBOW-Training (SGD), FindNearest, Analogien, Klassifikation, Save/Load
std.qbool Probabilistischer Boolean (Struct QBool): Wahrscheinlichkeits-basierte Logik-Operationen, fuzzy Entscheidungen mit Observe(), QBoolAnd, QBoolOr

→ Details mit vollständigen Beispielen: ML – Detaildokumentation

import std.ml;

fn PredictHousePrice(sqm: f64, rooms: f64): f64 {
    var X: [3][2]f64;
    var y: [3]f64;
    // Trainingsdaten befüllen …
    var model := LinearRegression(X, y, 3);
    var features: [2]f64;
    features[0] := sqm;
    features[1] := rooms;
    return Predict(model, features);
}


Utilities

Fünf allgemeine Hilfs-Units für häufig benötigte Querschnittsaufgaben.

Unit Beschreibung
std.conv Zahlensysteme (IntToHex/Bin/Oct, ParseHex/Bin/Oct, Tausendertrennzeichen) und Bitoperationen: GetBit/SetBit/ClearBit/ToggleBit, ExtractBits/InsertBits, CountLeadingZeros/CountTrailingZeros, SwapEndian16/32/64, GetByte/SetByte, SignExtend/ZeroExtend/ClampUint, AlignUp/AlignDown. Achtung: RotateLeft32 überschreitet 32 Bit (#1495), die Parser melden keine Fehler (#1500)
std.country ISO 3166-1-Länderdatenbank (249 Länder): Code ↔ Name, Währung, TLD, Telefon-Präfix, Region/Subregion
std.uuid UUIDs einlesen, vergleichen, prüfen (FromString, IsValid, GetVersion, Compare, SetNil). Seit 1.0.20F auch die Erzeugung korrekt (#1473–#1475): je Lauf verschieden, 36 Zeichen, Variant 1
std.systeminfo Systeminformationen aus /proc: Arbeitsspeicher (MemTotal/MemAvailable/MemFree), Systemlast, Laufzeit, eigene Prozessdaten. Seit 1.0.20F wird /proc tatsächlich gelesen (#1469–#1471): Kernzahlen, CPU-Zeiten und Laufzeit stimmen mit dem System überein
std.units Physikalische Einheitentypen (Meter, Kilogramm, Sekunde, …) mit Umrechnungsfaktoren; Umrechnung in die gröbere Einheit schneidet ganzzahlig ab

import std.uuid;
import std.conv;
import std.io;

fn GenerateToken(): pchar {
    return UuidToStr(UuidV4());   // "550e8400-e29b-41d4-a716-446655440000"
}

fn PrintBitmask(val: int64) {
    Print(IntToBin(val, 8));   // "00101010" — zweites Argument: Stellen
    Print(IntToHex(val, 2));   // "2A"
}


LyxVision (TUI-Framework)

LyxVision ist das integrierte Text-UI-Framework für terminalbasierte Anwendungen. Es ist nach dem Vorbild der klassischen Turbo Vision-Architektur aufgebaut: Ereignis-gesteuerte Widgets, Gruppen-/View-Hierarchie, modaler Dialog-Stack.

unit main;
import std.io;
import std.string;
import std.lyxvision.app;
import std.lyxvision.dialog;
import std.lyxvision.button;
import std.lyxvision.group;
import std.lyxvision.consts;

fn main(): int64 {
    var prog: TProgram := ProgramNew();
    prog := ProgramInit(prog);

    var dlg: TDialog := DialogNewCentered(50, 10, "Hallo LyxVision"c);
    var btn: TButton := ButtonCreateStd(18, 6, "  OK  "c, cmOK);
    GroupInsert(dlg, btn);

    var erg: int64 := ProgramExecuteDialog(prog, dlg);
    prog := ProgramDone(prog);
    Print("Ergebnis: "); PrintLn(IntToStr(erg));
    return 0;
}

Der Importpfad lautet std.lyxvision.* — ohne das std. scheitert der Import. Details und die Namenskonvention: LyxVision.

Unit Gruppe Beschreibung
lyxvision.main Kern Framework-Einstiegspunkt, Terminal-Helper-Funktionen
lyxvision.app Kern TProgram – Anwendungsschleife, Ereignis-Dispatch
lyxvision.tapplication Kern TApplication, TDesktop, Menü- und Statusleiste
lyxvision.drivers Kern Low-Level Terminal-Treiber (ANSI, xterm, Linux-Konsole)
lyxvision.types Typen TEvent, TPoint, TRect, Ereigniskonstanten (Maus, Tastatur, Befehl)
lyxvision.consts Typen Farben (16 Paare), View-Flags, State-Flags, Draw-Flags, Cursor-Stile
lyxvision.view Views TView – Basis-Darstellungsobjekt; Draw, HandleEvent, SetState
lyxvision.group Views TGroup – Container für Views; Insert, Delete, Broadcast
lyxvision.window Views TWindow – Rahmenfenster mit Titelleiste, Zoom, Resize
lyxvision.dialog Views TDialog – modaler Dialog; ExecView, Ergebnis-Handling
lyxvision.frame Views TFrame – Rahmenzeichnung (einfach/doppelt), Schatten
lyxvision.button Widgets TButton – Schaltfläche mit Befehl, Tastaturkürzel, Focus
lyxvision.cluster Widgets TCluster – Radio-Button- und Checkbox-Gruppe
lyxvision.inputline Widgets TInputLine – Texteingabefeld mit Validierungs-Callback
lyxvision.listview Widgets TListView – scrollbare Listenansicht, selektierbare Einträge
lyxvision.menu Widgets TMenu, TMenuBar, TSubMenu – vollständiges Menüsystem
lyxvision.statictext Widgets TStaticText – statische Textanzeige, mehrzeilig
lyxvision.staticline Widgets TStaticLine – horizontale/vertikale Trennlinie
lyxvision.terminal Widgets TTerminal – eingebetteter ANSI-Terminal-Emulator
lyxvision.textdevice Widgets TTextDevice – scrollbarer Textpuffer für Log-Ausgaben

Qt5-Bindings

Fünf Units für Desktop-GUI-Anwendungen mit Qt5. Die Bindings wrappen Qt5-C++-Funktionen über FFI und ermöglichen nativen OpenGL-Zugriff über EGL und GLX. Voraussetzung: Qt5 muss auf dem Zielsystem installiert sein.

Unit Beschreibung
std.qt5_app Qt5-Anwendungslebenszyklus: QApplication initialisieren, Event-Loop starten und beenden
std.qt5_core Qt5 Core-Modul: QString, QVariant, Signale/Slots-Infrastruktur
std.qt5_egl Qt5 EGL-Surface-Bindings für Embedded-Linux und Wayland-Targets
std.qt5_gl Qt5 OpenGL-Bindings: QOpenGLContext, QOpenGLFunctions, Shader
std.qt5_glx Qt5 GLX-Bindings für X11-OpenGL (klassisches Desktop-Linux)

import std.qt5_app;
import std.qt5_core;

fn main(): int64 {
    var app: QApp := QAppCreate();
    QAppSetTitle(app, "Lyx-Qt5-Fenster");
    QAppRun(app);
    QAppDestroy(app);
    return 0;
}


PDF-Bibliothek

25 Units für vollständige PDF-Erstellung und -Analyse direkt aus Lyx — ohne externe Bibliotheken. Erzeugt Standard-konforme PDFs (PDF 1.7) mit Text, Grafiken, TrueType-Schriften, Sonderfarben, Annotationen, Formularen, eingebetteten Dateien und PDF/A-Konformität. Interne Kompression über std.pdf.compress (zlib/DEFLATE).

Unit Beschreibung
std.pdf Öffentliche PDF-API: PdfNew, PdfSave, PdfAddPage — Einstiegspunkt für alle PDF-Operationen
std.pdf.objects Primitive für PDF-Buffer: Byte-Schreiboperationen, Objekt-Nummerierung
std.pdf.builder Dokument-Builder: Cross-Reference-Tabelle, Trailer, Objekt-Flattening
std.pdf.page Seitenverwaltung: PdfAddPage, PdfSetLandscape, Seitengrößen (A4, Letter …)
std.pdf.fonts Standard-14-Schriftarten-Konstanten und AFM-Metrik-Tabellen
std.pdf.ttfont TrueType-Schriften einbetten mit Unicode-Subsetting (Type0/CIDFontType2)
std.pdf.graphics Content-Stream: Text ausgeben, Pfade zeichnen, Farben setzen, Transformationen
std.pdf.shading Farbverläufe: lineare und radiale Gradient-Füllungen
std.pdf.spot Sonderfarben (Separation-Farbräume, PANTONE/CMYK)
std.pdf.xobject Form-XObjects: wiederverwendbare Grafik-Blöcke, die auf mehreren Seiten platziert werden können
std.pdf.compress zlib/DEFLATE-Kompression für PDF-Streams (intern genutzt)
std.pdf.image Rasterbilder: PdfAddImage (JPEG/RGB), PdfDrawImage mit Positionierung
std.pdf.meta Dokument-Metadaten: Titel, Autor, Thema, Schlüsselwörter, Erstellungsdatum
std.pdf.xmp XMP-Metadaten-Stream eingebettet im PDF-Katalog
std.pdf.annot Annotationen: URI-Links, GoTo-Links, Text-Notizen
std.pdf.forms AcroForms: interaktive PDF-Formularfelder (Text, Checkbox, Radio, Dropdown)
std.pdf.reader PDF-Lesen: PdfOpen, Seitenanzahl, Metadaten-Extraktion
std.pdf.outline Outlines (Lesezeichen): PdfOutlineAdd, verschachtelte Hierarchie
std.pdf.pagelabels Seitenbeschriftung: römisch, dezimal, alphabetisch
std.pdf.transition Seitenübergänge: Dissolve, Wipe, Push, Split (Präsentation)
std.pdf.viewprefs Viewer-Einstellungen: Toolbar ausblenden, Vollbild, Öffnungs-Action
std.pdf.namedest Benannte Sprungziele für interne Links und Outline-Verweise
std.pdf.attach Eingebettete Dateianhänge: PdfAttachFile
std.pdf.layer Optional-Content-Groups (Layer/OCG): sichtbare/ausblendbare Ebenen
std.pdf.pdfa PDF/A-Konformität: OutputIntent, sRGB-ICC-Profil, XMP pdfaid (Langzeitarchivierung)

import std.pdf;
import std.pdf.graphics;
import std.pdf.meta;

fn CreateReport(): void {
    var doc: Pdf := PdfNew();
    PdfSetTitle(doc, "Lyx Report 2026");
    PdfSetAuthor(doc, "Andreas Röne");
    var page: int64 := PdfAddPage(doc, 595.0, 842.0);   // A4 in Punkt
    PdfSetFont(doc, page, "Helvetica", 14);
    PdfDrawText(page, 72.0, 720.0, "Lyx PDF-Bibliothek — Beispiel");
    PdfSave(doc, "report.pdf");
}


LFD-Binärformat

Zwei Units für das Lyx File Data-Format (LFD) — ein strukturiertes Binärformat für effizienten Datenaustausch zwischen Lyx-Programmen.

Unit Beschreibung
std.lfd_parser LFD-Formularbeschreibungen (LyX Form Description) parsen: Lexer, Syntaxbaum, LFDParseString, LFDGetNodeType/-Child/-IntVal
std.lfd_factory Vorgesehene Widget-Factory zum LFD-Baum — derzeit eine leere Hülle, alle Funktionen liefern 0 bzw. false

SVG-Bibliothek

12 Units für programmatische Vektorgrafik-Erzeugung: Grundformen, Pfade, Text, Farbverläufe, Filter, Animationen und Einlesen vorhandener SVG-Dateien. Erzeugt standard-konforme SVG 1.1-Dateien ohne externe Abhängigkeiten.

→ Details und Architektur: std.svg Übersicht

import std.svg.builder;
import std.svg.elements;
import std.svg.style;
import std.svg.text;

// Stil setzen, Form zeichnen, mit SvgApply abschliessen —
// die Formfunktionen nehmen keinen Style-String.
var doc: int64 := SvgNew(800.0, 600.0);
SvgSetFillHex(doc, "royalblue");
SvgSetStroke(doc, 0.0, 0.0, 0.5);
SvgSetStrokeWidth(doc, 2.0);
SvgCircle(doc, 400.0, 300.0, 100.0);
SvgApply(doc);

SvgSetFillHex(doc, "white");
SvgSetFont(doc, "DejaVu Sans", 24.0);
SvgSetTextAnchor(doc, SVG_ANCHOR_MIDDLE);
SvgTextAt(doc, 400.0, 300.0, "Hallo SVG");
SvgApply(doc);

SvgSave(doc, "ausgabe.svg");     // 0 = geschrieben
SvgFree(doc);

Unit Gruppe Beschreibung
std.svg API Öffentliche Einstiegs-API: SvgNew, SvgSave, SvgFree, SvgToString
std.svg.builder Infrastruktur Dokumentlebenszyklus, Gruppen (&lt;g&gt;), Viewport, viewBox
std.svg.xml Infrastruktur Interner XML-Schreiber: Puffer, Zahlenformatierung, Escaping
std.svg.style Querschnitt Fill, Stroke, Opacity, Transforms, Dash-Muster, Farb-Utilities
std.svg.elements Inhalt Grundformen: rect, circle, ellipse, line, polyline, polygon
std.svg.path Inhalt Pfad-Builder: moveTo, lineTo, Bezier-Kurven, Bögen, close
std.svg.text Inhalt Text: SvgTextAt, tspan, Text auf Pfad, Rotation, Font-Styling
std.svg.defs Inhalt Definitionen: Farbverläufe, Muster, Symbole, Marker, Clips
std.svg.filter Inhalt Filter: Gaussian Blur, Schlagschatten, Graustufen, feComposite
std.svg.image Inhalt Bilder: JPEG/PNG einbetten, Base64-URI, RGB→PNG-Konvertierung
std.svg.anim Inhalt SMIL-Animation: animate, animateTransform, Keyframes, animateMotion
std.svg.parser Lesen SVG-Reader: SvgOpen, DOM-Traversierung, SvgAttrStr, SvgFindById

Hardware — Bluetooth

Neun Units für native Bluetooth-Kommunikation auf Linux. Die Units decken den vollständigen Stack ab: von rohen AF_BLUETOOTH-Sockets über BlueZ-D-Bus-Kontrolle bis zu vollständigen GATT-Client-/Server-Implementierungen für Bluetooth Low Energy (BLE).

→ Details: std.hardware.bluetooth Übersicht

Unit Beschreibung
std.hardware.bluetooth Low-Level Bluetooth-Socket-Syscalls (AF_BLUETOOTH)
std.hardware.bluetooth_types Bluetooth-Adress-, Socket- und Protokolltyp-Definitionen
std.hardware.bluetooth_dbus BlueZ D-Bus Steuerungsebene: Adapter- und Geräte-Management
std.hardware.bluetooth_rfcomm RFCOMM (Classic Bluetooth): Client und Server
std.hardware.bluetooth_l2cap BLE L2CAP und ATT-Protokollschicht
std.hardware.bluetooth_gattc GATT-Client: Service-Discovery, Characteristic Read/Write
std.hardware.bluetooth_gatts GATT-Server: eigene BLE-Services definieren und anbieten
std.hardware.bluetooth_ext BLE Scanner, Advertising und Mesh-Erweiterungen
std.hardware.bluetooth_ai KI-native, typsichere Bluetooth-Profile als Compiler-Typen

import std.hardware.bluetooth_gattc;
import std.hardware.bluetooth_types;

fn ReadHeartRate(target: BtAddr): int64 {
    var dev := GattcConnect(target);
    var services := GattcDiscoverServices(dev);
    var val := GattcReadChar(services[0], HEART_RATE_CHAR_UUID);
    GattcDisconnect(dev);
    return val;
}


Hardware — USB

Dreizehn Units für native USB-Host-Kommunikation auf Linux. Alle Transfers (Control, Bulk, Interrupt, Isochronous) direkt via usbdevfs-ioctls — kein libusb. Typsichere Endpoint-Wrapper und ein URB-Pool für überlappende Interrupt-Streams.

→ Details: std.hardware.usb Übersicht

Unit Beschreibung
std.hardware.usb_syscalls Low-Level Syscall-Wrapper: open/read/write/ioctl/close/lseek/getdents64/poll
std.hardware.usb_util Dirent64-Parser, UsbIsNumeric, UsbParseNum, UsbBuildPath
std.hardware.usb_types Descriptor-Konstanten, Lyx-Structs (UsbDevice/Interface/Endpoint), Accessoren
std.hardware.usb_parse UsbAllocDevice, UsbParseConfiguration — Descriptor-Strom → Baum
std.hardware.usb_discovery UsbFindDevice, UsbFindDevicePath — VID/PID-Scan über /dev/bus/usb/
std.hardware.usb_control Control-Transfers, UsbGetDeviceDescriptor, UsbClaimInterface, UsbReleaseInterface
std.hardware.usb_bulk UsbBulkWrite, UsbBulkRead — synchrone Bulk-Transfers
std.hardware.usb_interrupt URB allokieren/einreichen/warten — asynchrone Interrupt-Transfers
std.hardware.usb_iso ISO-URBs mit Paket-Deskriptoren — UsbSubmitIsoRead, UsbReapIsoUrb
std.hardware.usb_endpoint_types Typsichere Wrapper: UsbBulkOutEndpoint (nur Write), UsbBulkInEndpoint (nur Read)
std.hardware.usb_endpoint_bind Endpoint-Registry: Adressen per Schlüssel binden, UsbEpWrite, UsbEpRead
std.hardware.usb_ifc_mgr Idempotenter Claim-Manager: UsbIfcAcquire, UsbIfcRelease
std.hardware.usb_urb_pool URB-Pool (4 Slots): UsbUrbPoolInit, UsbUrbPoolPoll, UsbUrbPoolResubmit

import std.hardware.usb_discovery;
import std.hardware.usb_parse;
import std.hardware.usb_control;
import std.hardware.usb_bulk;

fn OpenDevice(): int64 {
  var dev: int64 := UsbAllocDevice();
  if (UsbFindDevice(0x1234, 0x5678, dev) != USB_FIND_OK) { return -1; }
  var fd: int64 := peek64(dev + 48);   // dev.handle
  UsbClaimInterface(fd, 0);
  return fd;
}


Hardware — GPIO

Acht Units für native GPIO-Steuerung auf dem Raspberry Pi 4 (BCM2711/ARM64). Zwei komplementäre Zugriffsmodi: MMIO-Direktzugriff (kein Syscall nach der Initialisierung — ideal für Software-PWM und Bit-Bang-Protokolle) und Linux GPIO-v2 ioctl (Multi-Pin atomar, Edge-Detection, Consumer-Labels). Typsichere Pin-Wrapper verhindern zur Compile-Zeit, dass ein Output-Pin gelesen oder ein Input-Pin geschrieben wird.

→ Details: std.hardware.gpio Übersicht

Unit Beschreibung
std.hardware.gpio_barriers ARM64 Memory-/Instruction-Barrier: GpioMemBarrier (DMB SY), GpioInstBarrier (ISB SY)
std.hardware.gpio_syscalls Low-Level Syscall-Wrapper: GpioOpen, GpioIoctl, GpioPoll, GpioMmap, GpioMunmap
std.hardware.gpio_util Hilfsfunktionen: GpioDelayMicroseconds (±1–2 µs), GpioCopyStringToBuf
std.hardware.rpi4 BCM2711-Hardware-Konstanten: Register-Offsets, Pin-Modi, Pull-Codes (nur Konstanten)
std.hardware.gpio_mmio MMIO-Direktzugriff: GpioInit, GpioSetPinMode, GpioWritePin, GpioReadPin, GpioSetPullMode
std.hardware.gpio_ioctl Linux GPIO-v2 ioctl: GpioGetChipInfo, GpioRequestLines, GpioSetLineValues, GpioGetLineValues
std.hardware.gpio_pin Typsichere Wrapper: GpioOutputPin* (nur Write), GpioInputPin* (nur Read)
std.hardware.gpio_ext Erweiterungen: GpioSetAltMode (ALT0–ALT5), GpioWaitForEdge, GpioSoftPWM

import std.hardware.gpio_mmio;
import std.hardware.gpio_pin;
import std.hardware.gpio_ext;

fn main(): int64 {
    var ctx := GpioCtxAlloc();
    GpioInit(ctx);

    // LED an Pin 18 mit typsicherem Wrapper
    var led := GpioOutputPinAlloc(ctx, 18);
    GpioOutputPinInit(led, GPIO_PULL_NONE);

    // Taster an Pin 17 mit Pull-Up
    var btn := GpioInputPinAlloc(ctx, 17);
    GpioInputPinInit(btn, GPIO_PULL_UP);

    // Software-PWM: LED dimmen (1 kHz, 50 % Duty, 2 Sekunden)
    GpioSoftPWM(ctx, 18, 1000, 50, 2000);

    GpioOutputPinFree(led);
    GpioInputPinFree(btn);
    GpioClose(ctx);
    GpioCtxFree(ctx);
    return 0;
}


Hardware — PCI

Zwölf Units für nativen PCI-/PCIe-Zugriff unter Linux. Der Konfigurationsraum ist über drei austauschbare Zugriffswege erreichbar — sysfs (der Normalfall, kein Root für Lesezugriffe nötig), ECAM (speicherabgebildet, für Firmware und Bare-Metal) und Legacy-Port-I/O über 0xCF8/0xCFC. Darauf setzen Geräte-Enumeration, BAR-Dekodierung mit MMIO-Zugriff, das Durchlaufen der Capability-Liste und — über VFIO — DMA-Mapping, Geräte-Reset und Interrupts per eventfd.

Unit Beschreibung
std.hardware.pci Fassade: Gerätekontext, BAR-Mapping, Capabilities — der Einstiegspunkt für den Normalfall
std.hardware.pci_types Konstanten des Konfigurationsraums (Offsets, Header-Typen, Klassencodes)
std.hardware.pci_config Zugriff auf den Konfigurationsraum mit austauschbarem Backend
std.hardware.pci_ecam Konfigurationsraum über ECAM (memory mapped)
std.hardware.pci_portio Konfigurationsraum über Legacy-Port-I/O (0xCF8/0xCFC)
std.hardware.pci_enum Geräte-Enumeration über sysfs oder Bus-Scan
std.hardware.pci_bar BAR-Dekodierung und MMIO-Zugriff
std.hardware.pci_caps Capability-Liste durchlaufen und auswerten
std.hardware.pci_irq Interrupt-Behandlung über VFIO-eventfd
std.hardware.pci_vfio VFIO-Gerätezugriff: Regionen, DMA-Mapping, Reset
std.hardware.pci_ids Hersteller-, Geräte- und Klassennamen aus pci.ids auflösen
std.hardware.pci_syscalls Low-Level-Syscalls, BDF-Zerlegung und sysfs-Pfadhilfen

Rechte: Lesen aus dem Konfigurationsraum über sysfs geht als gewöhnlicher Nutzer. BAR-Mapping, Port-I/O und VFIO verlangen erhöhte Rechte beziehungsweise ein an vfio-pci gebundenes Gerät — und im @capabilities-Manifest die entsprechenden Einträge.


Android

16 Units für native Android-Entwicklung über das NDK (Native Development Kit). Ermöglichen vollständige Android-Apps in Lyx ohne Java-Schicht: JNI-Typen, OpenGL ES 2.0, Sensoren, Asset-Manager, APK-Bau und Logcat-Logging.

Unit Beschreibung
std.android.apk_builder APK-Builder: PKZIP-Archive für Android-Pakete zusammenstellen
std.android.app_glue NativeActivity-Worker-Thread-Glue-Schicht (android_app-Struktur)
std.android.asset NDK-Asset-Manager: Typen und Konstanten für AAssetManager
std.android.gles2 OpenGL ES 2.0 Core-Bindings: Shader, Texturen, Framebuffer
std.android.input NDK-Eingabe-Events: Typen und Konstanten für AInputEvent
std.android.ioctl ioctl-Nummernkatalog für ASHMEM, ALSA und V4L2
std.android.jni JNI 1.6 Typ-Aliases: JNIEnv, JavaVM, jclass, jobject
std.android.log Logcat-Logging: Ausgabe auf stderr/fd 2 mit Priority-Level
std.android.looper ALooper-Ereignis-Dispatch-Primitiv für native Event-Loops
std.android.manifest_gen AndroidManifest.xml-Generator für native Activities
std.android.native_activity ANativeActivity-Struct und Callback-Tabelle
std.android.native_window NDK-Native-Window: Typen und Pixelformat-Konstanten
std.android.random Kryptografische Zufallszahlen via /dev/urandom
std.android.restrictions Katalog der unter SELinux/Bionic gesperrten Syscalls
std.android.sensor NDK-Sensor-Typen: Beschleunigungsmesser, Gyroskop, Magnetometer
std.android.zip_writer PKZIP-Writer für gespeicherte Einträge (Grundlage für APK-Build)

import std.android.jni;
import std.android.log;
import std.android.gles2;

fn Java_com_example_Main_init(env: JNIEnv, obj: jobject): void {
    AndroidLog(ANDROID_LOG_INFO, "MyApp", "Native init gestartet");
    GLViewport(0, 0, 1920, 1080);
    GLClearColor(0.1, 0.1, 0.1, 1.0);
}

Cloud — AWS

13 Units für AWS-Dienste und interne Schichten. Vollständig in Lyx implementiert — kein AWS SDK. Alle Requests werden mit AWS Signature Version 4 (SigV4) signiert.

Unit Beschreibung
std.cloud.aws Alle AWS-Units auf einer Übersichtsseite
std.cloud.s3 S3: Buckets, Upload/Download/Range, Multipart, Pagination, Presigned URLs (GET/PUT/DELETE/HEAD); S3ConnectR2 + S3ConnectMinio (54 Fn)
std.cloud.ec2 EC2: Instanzen, AMIs, Key Pairs, Security Groups, VPCs, Elastic IPs, EBS (32 Fn)
std.cloud.dynamodb DynamoDB: Table-CRUD, PutItem, GetItem, Query, Scan, UpdateItem (20 Fn)
std.cloud.lambda Lambda: Funktionen erstellen, deployen, aufrufen, Event-Source-Mappings (15 Fn)
std.cloud.iam IAM+STS: Users, Roles, Policies, Access Keys, AssumeRole (23 Fn)
std.cloud.sqs SQS: Standard- und FIFO-Queues, Send, Receive, Delete, Batch (17 Fn)
std.cloud.sns SNS: Topics, Subscribe, Publish, SMS, Platform Endpoints (16 Fn)
std.cloud.cloudwatch CloudWatch: Metriken, Alarme, Logs (CWClient + CWLogsClient, 21 Fn)
std.cloud.secrets Secrets Manager + SSM Parameter Store: Secret-CRUD, Rotation (23 Fn)
std.cloud.aws.core Credentials (Chain/Static/Env/File), Endpoint-Auflösung, AWSServiceConfig
std.cloud.aws.sigv4 SigV4-Signatur: Header-Auth und Presigned Query Strings
std.cloud.aws.transport HTTP-Transport mit Retry, JSON/XML/REST/S3-Request-Helpers
std.cloud.aws.xml Leichtgewichtiger XML-Parser und Query-String-Builder für EC2/S3

import std.cloud.aws.core;
import std.cloud.s3;

fn main(): int64 {
    var creds: AWSCreds := AWSCredentialsDefault();
    var s3: S3Client := S3Connect(creds, "eu-central-1"c);
    S3PutObjectFile(s3, "mein-bucket"c, "bericht.pdf"c, "/tmp/bericht.pdf"c, "application/pdf"c);
    S3Close(s3);
    return 0;
}


Cloud — DigitalOcean

13 Units für die DigitalOcean API v2. Authentifizierung über Bearer-Token (DOCredentials).

Unit Beschreibung
std.cloud.digitalocean Alle DO-Units auf einer Übersichtsseite
std.cloud.digitalocean.droplets VMs: Erstellen, Starten, Stoppen, IP ermitteln, Warten, SSH-Keys (43 Items)
std.cloud.digitalocean.volumes Block-Storage: Anlegen, Anhängen, Snapshots (21 Items)
std.cloud.digitalocean.spaces Objekt-Speicher (S3-kompatibel): Buckets, Upload/Download (17 Items)
std.cloud.digitalocean.databases Managed Databases: PostgreSQL/MySQL/Redis, Users, Pools, Firewall (42 Items)
std.cloud.digitalocean.kubernetes DOKS: Cluster, Node-Pools, Kubeconfig (22 Items)
std.cloud.digitalocean.apps App Platform: Deploy, Deployments, Logs (20 Items)
std.cloud.digitalocean.functions Serverless Functions: Namespaces, Invoke, Logs (17 Items)
std.cloud.digitalocean.networking DNS, Load Balancer, Floating IPs, VPCs, Firewalls (45 Items)
std.cloud.digitalocean.monitoring Alert Policies, CPU/Bandbreite/Disk/Memory-Metriken (19 Items)
std.cloud.digitalocean.registry Container Registry: Repositories, Tags, GC, Docker-Credentials (17 Items)
std.cloud.digitalocean.credentials Bearer-Token: Env, Datei, doctl-Config, Token-Validierung (16 Items)
std.cloud.digitalocean.transport HTTP-Client für DO API v2 (DOGet/Post/Put/Patch/Delete)
std.cloud.digitalocean.core Initialisierung und Version

import std.cloud.digitalocean.credentials;
import std.cloud.digitalocean.droplets;

fn main(): int64 {
    var creds: DOCredentials := DOCredentialsFromEnv();
    var keys: array<int64> := [12345678];
    var d: DODroplet := DropletCreateSimple(creds, "web-01"c, "fra1"c,
                                            "s-2vcpu-2gb"c, "ubuntu-22-04-x64"c);
    d := DropletWait(creds, d.id, "active"c);
    var ip: int64 := DropletGetIP(creds, d.id);
    Print("IP: "c); Print(ip as pchar); PrintLn(""c);
    DODropletFree(d);
    DOCredentialsFree(creds);
    return 0;
}

Cloud — Cloudflare

16 Units für die Cloudflare API v4. Authentifizierung über API-Token (CFCredentials). CFResponse unterscheidet sich von AWS: success-Feld (1/0) statt HTTP-Statuscode.

Unit Beschreibung
std.cloud.cf Alle CF-Units auf einer Übersichtsseite
std.cloud.cf.zones Domains: Anlegen, Pause/Unpause, SSL-Settings, Development Mode (29 Items)
std.cloud.cf.dns DNS-Records CRUD + Upsert, Suche nach Typ/Name (23 Items)
std.cloud.cf.workers Workers deployen, Routes, Secrets, Crons, Tail, Subdomain (27 Items)
std.cloud.cf.kv Workers KV: Get/Put/Delete, TTL, Bulk, paginiertes Listing (19 Items)
std.cloud.cf.r2 R2 Objekt-Speicher: Upload/Download, Multipart, Presigned URLs, Custom Domains (27 Items)
std.cloud.cf.d1 D1 SQLite: Create/Query/Exec/ExecScript (24 Items)
std.cloud.cf.cache Cache-Purge (All/Files/Tags/Prefixes), Page Rules, Cache-Rules, Transform Rules (31 Items)
std.cloud.cf.waf Firewall-Rules, IP/Country-Sperren, Rate Limiting (32 Items)
std.cloud.cf.lb Load Balancer: Health Checks, Origin Pools, Load Balancer (20 Items)
std.cloud.cf.pages Pages: Projekte, Deployments, Custom Domains, Env-Vars (23 Items)
std.cloud.cf.tunnel Cloudflare Tunnel: erstellen, Token, Ingress-Regeln (22 Items)
std.cloud.cf.email Email Routing: Regeln, Worker-Weiterleitung, DNS-Verifikation (19 Items)
std.cloud.cf.analytics Zone-Analytics, GraphQL, Logpush, Web Analytics (14 Items)
std.cloud.cf.credentials API-Token / Legacy-Key, Env, Config-Datei (11 Items)
std.cloud.cf.transport CFClient, CFResponse, HTTP-Helpers
std.cloud.cf.core Interne JSON/Pfad-Builder (kein direkter Import nötig)

import std.cloud.cf.credentials;
import std.cloud.cf.transport;
import std.cloud.cf.dns;

fn main(): int64 {
    var creds: CFCredentials := CFCredentialsFromEnv();
    var c: CFClient := CFClientNew(creds);

    // A-Record anlegen oder aktualisieren
    var r: CFDNSRecord := DNSRecordUpsert(c, "abc123"c, "A"c,
                                          "api"c, "1.2.3.4"c, 1, 1);
    CFDNSRecordFree(r);

    CFClientFree(c);
    CFCredentialsFree(creds);
    return 0;
}


Cloud — GCP

11 Units für die Google Cloud Platform API. Authentifizierung über Application Default Credentials (GCPCredentials): Service Account (JWT RS256), Authorized User (OAuth 2.0 Refresh Token) oder GCE-Metadata-Server. Kein GCP SDK.

Unit Beschreibung
std.cloud.gcp Alle GCP-Units auf einer Übersichtsseite
std.cloud.gcp.storage Cloud Storage (GCS): Buckets, Upload/Download, Metadaten, Listing (13 Fn)
std.cloud.gcp.compute Compute Engine (GCE): Instanzen, asynchrone Operationen via GCEOperation, Standard-Zone europe-west1-b (10 Fn)
std.cloud.gcp.firestore Cloud Firestore: FSDoc (max. 64 Felder), CRUD, Listing (20 Fn)
std.cloud.gcp.pubsub Cloud Pub/Sub: Topics, Subscriptions, Publish (base64url), Pull, Acknowledge (10 Fn)
std.cloud.gcp.functions Cloud Functions v2 + Cloud Run v2: Deploy, Invoke, Service-Listing (12 Fn)
std.cloud.gcp.logging Cloud Logging + Cloud Monitoring: Text/JSON-Logs, Custom Metrics, Alert Policies (10 Fn)
std.cloud.gcp.secrets Secret Manager + IAM: Secret-CRUD, Versionierung, Service Accounts, IAM-Policies (15 Fn)
std.cloud.gcp.credentials Application Default Credentials: Credential Chain, Token-Cache, GCE-Erkennung (8 Fn)
std.cloud.gcp.jwt JWT RS256 für Service Accounts: GCPServiceAccount, GCPBuildJWT, Base64url (5 Fn)
std.cloud.gcp.oauth Access-Token-Verwaltung: GCPToken, auto-Refresh (Ablauf − 60 s) (5 Fn)
std.cloud.gcp.transport HTTP-Transport: GCPClient, GCPResponse, auto-Retry auf 429/5xx, Backoff (10 Fn)

import std.cloud.gcp.credentials;
import std.cloud.gcp.storage;

fn main(): int64 {
    // Credential Chain: GOOGLE_APPLICATION_CREDENTIALS → ADC → GCE-Metadata
    var creds: GCPCredentials := GCPCredentialsDefault(
        "https://www.googleapis.com/auth/devstorage.read_write"c as int64);
    var gcs: GCSConn := GCSConnect(creds, "mein-projekt"c);
    var data: pchar := "Hallo GCS"c;
    GCSUpload(gcs, "mein-bucket"c, "hello.txt"c, data as int64, 9);
    GCSDisconnect(gcs);
    GCPCredentialsFree(creds);
    return 0;
}

KassenSichV

Eigener Namensraum neben std: Diese 6 Units heißen kassensichv.* — sie liegen nicht unter std und werden auch nicht als std.kassensichv importiert. Grund ist der eigene, an Rechtslage und TSE-Zertifizierung gebundene Release-Zyklus. Noch nicht im Compiler-Paket 1.0.17K enthalten — Import schlägt derzeit fehl.

6 Units für gesetzeskonforme TSE-Anbindung nach KassenSichV, BSI TR-03153 und DSFinV-K 2.3. Vollständige Kapselung des Signierablaufs: Kassensoftware übergibt Belegdaten, erhält alle Pflichtangaben für den Bondruck — einschließlich QR-Code-String nach BSI TR-03153 Anhang A.

→ Details und Provider-Konzept: kassensichv Übersicht

Unit Beschreibung
kassensichv.types BelegDaten, SigErgebnis, Prozesstyp-Konstanten (PROZESSTYP_KASSENBELEG, …)
kassensichv.manager Haupteinstiegspunkt: TseProcessBeleg, TseOpenBeleg, TseCloseBeleg, TseExportAuditData
kassensichv.mock Test-Provider ohne TSE-Hardware; Fehlersimulation (Timeout, Connection)
kassensichv.rest Cloud-TSE via HTTPS/REST (Fiskaly, Deutsche Fiskal); TLS 1.2+, Retry mit Backoff
kassensichv.file USB-TSE via Dateisystem (Swissbit, Epson); Poll alle 100 ms, Timeout konfigurierbar
kassensichv.exceptions TseError-Typ mit Code (400–503) und deutschsprachiger Fehlermeldung

import kassensichv.types;
import kassensichv.mock;
import kassensichv.manager;

fn DruckKassenbon(): void {
    var mgr: int64 := TseMockNew();   // für Tests; TseRestNew/TseFileNew für echte TSE

    var beleg: BelegDaten;
    beleg.prozessTyp   := PROZESSTYP_KASSENBELEG;
    beleg.kassenNr     := "KASSE-001"c;
    beleg.prozessDaten := "Kaffee;2.50_0.00_0.00_0.00_0.00"c;
    beleg.umsatz       := 250;   // Eurocent

    var sig: int64 := TseProcessBeleg(mgr, beleg);
    var s: SigErgebnis := sig;

    // Pflichtdaten auf Bon drucken
    PrintLn(s.tseSerial as pchar);        // TSE-Seriennummer
    PrintLn(IntToStr(s.sigZaehler));     // Signaturzähler
    PrintLn(s.qrCode as pchar);           // QR-Code-String BSI TR-03153

    SigErgebnisFree(sig);
    TseManagerFree(mgr);
}


Blockchain

Zwei Units für eine vollständige Proof-of-Work-Blockchain in Lyx: Transaktionen, Blöcke, kontobasierter Ledger, Mining, Kettenvalidierung und TCP-P2P-Netzwerk.

Unit Beschreibung
std.blockchain Serializer (Big-Endian, Merkle-Root), Transaktions- und Block-Modelle, immutable Ledger (1024-Bucket-Hashtabelle), PoW-Konsens (Mining, Schwierigkeitsanpassung, Kettenvalidierung)
std.blockchain.p2p TCP P2P-Netzwerk: Knoten, Peer-Verbindungen, Broadcast TX/Block, Nachrichten-Deserializer

import std.blockchain;
import std.blockchain.p2p;
import std.crypto.ecc;
import std.alloc;

fn main(): int64 {
    var bc: int64 := BLBlockchainNew(1, 50000000, 100);

    // Miner-Adresse aus Public Key ableiten
    var priv: int64 := alloc(BL_PRIVKEY_LEN);
    var pub:  int64 := alloc(BL_PUBKEY_LEN);
    ECCGenerateKeyPair(priv, pub);
    var addr: int64 := alloc(BL_ADDR_LEN);
    SHA256(pub, BL_PUBKEY_LEN, addr);

    // Block minen — erster Block nach Genesis
    BLMinePendingTransactions(bc, addr);

    // P2P-Knoten starten
    var node: int64 := BLP2PNodeNew(bc, 9000);
    BLP2PNodeStart(node);

    // ... TX hinzufügen, weitere Blöcke minen, Peers verbinden ...

    BLP2PNodeFree(node);
    BLBlockchainFree(bc);
    free(priv, BL_PRIVKEY_LEN);
    free(pub,  BL_PUBKEY_LEN);
    free(addr, BL_ADDR_LEN);
    return 0;
}


CPU & SIMD

Zwei Units als Grundlage für SIMD-beschleunigtes Rechnen (WP-GPU-02). Sie erkennen zur Laufzeit die CPU-Fähigkeiten und stellen 16-Byte-ausgerichtete f32-Arrays bereit. GPU-Units (std.gpu.*) sind geplant, aber noch nicht implementiert.

Unit Beschreibung
std.cpu.features CPU-Feature-Erkennung via /proc/cpuinfo: SSE2, SSE4.1, AVX2; Bitmask-Konstanten, gecachtes Ergebnis; CpuFeatureDetect, CpuHasSSE2/SSE41/AVX2
std.cpu.dispatch Runtime-SIMD-Dispatch (AVX2 > SSE2 > Scalar); 16-Byte-ausgerichtete f32-Arrays via mmap; SimdAlloc, SimdAdd/Sub/Mul/Div, SimdGet/Set/Len, CpuDispatchLevel

import std.cpu.dispatch;
import std.io;

fn main(): int64 {
    // Dispatch-Level abfragen
    var lvl: int64 := CpuDispatchLevel();
    if (lvl == CPU_DISPATCH_AVX2) {
        PrintLn("AVX2 aktiv");
    } else if (lvl == CPU_DISPATCH_SSE2) {
        PrintLn("SSE2 aktiv");
    } else {
        PrintLn("Scalar-Fallback");
    }

    // f32-Arrays anlegen (Bits: 1.0 = 0x3F800000, 2.0 = 0x40000000)
    var a: int64 := SimdAlloc(4);
    var b: int64 := SimdAlloc(4);
    var i: int64 := 0;
    while (i < 4) {
        SimdSet(a, i, 0x3F800000);  // 1.0
        SimdSet(b, i, 0x40000000);  // 2.0
        i := i + 1;
    }
    var result: int64 := SimdAdd(a, b);
    PrintLn(StrConcat(IntToStr(SimdLen(result)), " Elemente berechnet"));
    return 0;
}

Hinweis: Der Scalar-Fallback in std.cpu.dispatch ist ein Placeholder (WP-GPU-02 in Entwicklung). Echte SIMD-Instruktionen (ADDPS/VADDPS) werden vom Compiler-Codegen emittiert, wenn der Compiler f32-Ausdrücke auf SIMD-Arrays optimiert.

Bildverarbeitung

Neun Units zum Laden und Verarbeiten von Rasterbildern. Alle Formate werden auf ein einheitliches internes Format normalisiert: RGBA, 4 Kanäle, 8 Bit/Kanal, zeilenweise top-down. Der GrfImage-Struct (56 Bytes) ist der gemeinsame Träger.

→ Details: std.image Übersicht

Unit Beschreibung
std.image.core GrfImage-Struct (GRF-00): Allokation, Pixel-Lesen/Schreiben, Füllen, Format-Erkennung via Magic-Bytes
std.image.image Unified Facade (GRF-08): ImageDecode (Datei), ImageDecodeFromMem (Puffer), ImageFree, ImageGetWidth/Height/Channels, ImagePixelAt
std.image.bmp BMP-Decoder (GRF-01)
std.image.png PNG-Decoder (GRF-02)
std.image.jpeg JPEG-Decoder (GRF-03)
std.image.gif GIF-Decoder (GRF-04)
std.image.tiff TIFF-Decoder (GRF-05), Little-Endian und Big-Endian
std.image.webp WebP-Decoder (GRF-06)
std.image.avif AVIF-Decoder (GRF-07)

import std.image.image;
import std.image.core;
import std.alloc;

fn main(): int64 {
    var img: int64 := GrfImageAlloc(0, 0);
    if (ImageDecode("foto.jpg"c, 0, img) == 0) { return 1; }

    var w: int64 := ImageGetWidth(img);
    var h: int64 := ImageGetHeight(img);
    var px: int64 := ImagePixelAt(img, w / 2, h / 2);   // Mittelpixel
    var r: int64 := (px >> 24) & 255;                    // Rotanteil

    ImageFree(img);
    return 0;
}


Office-Dokumente

Vier Units für die Erstellung von ODF-konformen Dokumenten. std.office.odt erzeugt Textdokumente (.odt), std.office.ods Tabellenkalkulationen (.ods). Beide nutzen intern std.zip für das ZIP-Archiv-Format von ODF.

→ Details: std.office Übersicht

Unit Beschreibung
std.office.odf_doc OdfDocument-Klasse (OFF-03): Initialisierung, Puffer-Verwaltung, Style-Deduplizierung, SaveToFile
std.office.odt ODT-Text-Writer (OFF-04): OdtAddParagraph, OdtAddHeading, OdtAddParagraphStyled, OdtAddHorizontalRule, OdtAddLineBreak
std.office.ods ODS-Tabellen-Writer (OFF-05): OdsAddSheet, OdsSetCell, OdsSetCellInt, OdsSetCellFloat, OdsFlushSheet
std.office.odf_xml XML-Templates intern (kein direkter Import nötig)

import std.office.odf_doc;
import std.office.odt;

fn main(): int64 {
    var doc: OdfDocument := new OdfDocument();   // Klasse — ohne new gibt es SIGSEGV
    doc.Init(ODF_TYPE_TEXT);
    OdtAddHeading(doc, "Bericht Q2 2026", 1);
    OdtAddParagraphStyled(doc, "Wichtig: Bitte lesen!", 1, 0);   // fett
    OdtAddParagraph(doc, "Alles in Ordnung.");
    doc.SaveToFile("bericht.odt"c);
    doc.Close();
    return 0;
}


Video

Drei Units für Video-Container-Metadaten. Unterstützte Container: AVI und MP4/ISOBMFF. Codec-Erkennung für H.264, H.265, AV1, VP8, VP9, MPEG-4 Part 2 und MJPEG. AVI mit MJPEG-Codec unterstützt zusätzlich Frame-Extraktion und direkte Dekodierung über std.image.jpeg.

→ Details: std.video Übersicht

Unit Beschreibung
std.video.core VidMeta-Struct (VID-00, 64 Bytes): Offsets für Breite/Höhe/Dauer/FPS/Frames/Format/Codec; Format- und Codec-Konstanten; VidDetectFormat
std.video.avi AVI-Reader (VID-01): AviMeta, AviMetaFile, AviGetFrameCount, AviGetFrameOffset, AviExtractMjpegFrame
std.video.mp4 MP4/ISOBMFF-Reader (VID-02): Mp4Meta, Mp4MetaFile; Box-Traversierung moov→mvhd→trak→tkhd→mdia→stsd

import std.video.core;
import std.video.mp4;
import std.alloc;
import std.io;

fn main(): int64 {
    var vid: int64 := alloc(VID_SIZE);
    if (Mp4MetaFile("film.mp4"c, 0, vid) == 0) { return 1; }

    var w:   int64 := peek64(vid + VID_OFF_WIDTH);
    var h:   int64 := peek64(vid + VID_OFF_HEIGHT);
    var dur: int64 := peek64(vid + VID_OFF_DURATION_MS) / 1000;
    PrintLn(StrConcat(StrConcat(StrConcat(StrConcat(StrConcat(IntToStr(w), "x"), IntToStr(h)), "  Dauer: "), IntToStr(dur)), "s"));

    free(vid, VID_SIZE);
    return 0;
}


OpenPGP

Vier Units für OpenPGP nach RFC 4880. Das Paket ist eine Parser- und Codec-Bibliothek: ASCII-Armor lesen und schreiben, binäre Paket-Ströme iterieren, Public-Key-Metadaten extrahieren. Kein Schlüssel-Generieren, kein Ver-/Entschlüsseln, kein Signieren.

→ Details: std.pgp Übersicht

Unit Beschreibung
std.pgp.core Konstanten: PGP_TAG_* (19 Paket-Tags), PGP_ALG_* (8 Algorithmen), PGP_HASH_*, PGP_SYM_*, PGP_SIG_* (Signaturtypen), PGP_ARMOR_*; PgpPacketInfo-Struct-Offsets (32 Bytes); PgpCrc24 (RFC 4880 §6.1, Init 0xB704CE, Poly 0x1864CFB)
std.pgp.armor PgpArmorEncode (Binär → Base64+Header+CRC), PgpArmorDecode (Base64-Decode + CRC-24-Verifikation, -1 bei Fehler), PgpArmorType (erkennt PUBLIC KEY / PRIVATE KEY / MESSAGE / SIGNATURE)
std.pgp.packet PgpPacketFirst/PgpPacketNext: Zero-Copy-Iterator über Old-Format- und New-Format-Pakete; PGP_PKT_OFF_BODY zeigt direkt in Quell-Buffer
std.pgp.key PgpKeyVersion (3 oder 4), PgpKeyAlgo (PGP_ALG_*), PgpKeyTimestamp (Unix-Sekunden), PgpKeyFingerprint (v4: 20-Byte SHA-1), PgpKeyId (letzte 8 Bytes des Fingerprints); nur v4 für Fingerprint

import std.pgp.core;
import std.pgp.armor;
import std.pgp.packet;
import std.pgp.key;
import std.alloc;

fn ReadPublicKey(armText: int64, armLen: int64): void {
    // Armor dekodieren
    var raw: int64 := alloc(armLen);
    var rawLen: int64 := PgpArmorDecode(armText, armLen, raw, armLen);
    if (rawLen < 0) { free(raw, armLen); return; }

    // Pakete iterieren
    var pkt: int64 := alloc(PGP_PKT_SIZE);
    var fp:  int64 := alloc(20);
    if (PgpPacketFirst(raw, rawLen, pkt) != 0) {
        var more: int64 := 1;
        while (more != 0) {
            var tag:  int64 := peek64(pkt + PGP_PKT_OFF_TAG);
            var body: int64 := peek64(pkt + PGP_PKT_OFF_BODY);
            var blen: int64 := peek64(pkt + PGP_PKT_OFF_BLEN);
            if (tag == PGP_TAG_PUBKEY) {
                PgpKeyFingerprint(body, blen, fp);
                // fp[0..19] = 20-Byte SHA-1 Fingerprint
            }
            more := PgpPacketNext(raw, rawLen, pkt);
        }
    }
    free(pkt, PGP_PKT_SIZE);
    free(fp, 20);
    free(raw, armLen);
}


HL7 v2

Vier Units für HL7 Version 2 — den Datenaustauschstandard im Gesundheitswesen. Abgedeckt ist der gesamte Stack: MLLP-Framing, MSH-Parser, ACK-Engine, Patientenverwaltung (ADT), Auftragswesen (ORM/OML) und Befundübermittlung (ORU/OUL).

→ Details und Nachrichtenflüsse: std.hl7 Übersicht

Unit Beschreibung
std.hl7.core MLLP-Framing (VT+FS+CR), MSH-Parser, ACK-Generator (AA/AE/AR), Dedup-State (FNV1a, 16 Partner × 64-Ring), Versions- und Testmodus-Prüfung
std.hl7.adt Patient Administration (ADT&#94;Axx): PID (3 ID-Slots, Name, Geburt, Geschlecht), PV1 (Klasse, Bett, Arzt, Zeiten), MRG (Merge), NK1 (Angehörige); Hl7AdtParse/Write; Merge-Erkennung (A34–A45)
std.hl7.orders Order Management (ORM&#94;O01, OML&#94;O21, RAS&#94;O17): ORC (Kontroll-Code, Placer/Filler), OBR (Service-ID, Priorität, Zeiten), RXA (Medikamentengabe); STAT-Erkennung; Hl7OrrWrite (ORR&#94;O02/ORL&#94;O22)
std.hl7.results Result Reporting (ORU&#94;R01, OUL&#94;R22): OBX (Wertetyp, LOINC, Wert, UCUM-Einheit, Referenzbereich, Abnormal-Flag, Status); automatische Panikwert- (HH/LL/AA/CC) und Korrektur-Erkennung (C/W); NTE-Kommentare

import std.hl7.core;
import std.hl7.adt;
import std.alloc;

fn handleAdt(msgBuf: int64, msgLen: int64, state: int64): void {
    var msh: int64 := alloc(HL7_MSH_SIZE);
    if (Hl7MshParse(msgBuf, msgLen, msh) != HL7_OK) {
        free(msh, HL7_MSH_SIZE);
        return;
    }

    var adt: int64 := alloc(HL7_ADT_SIZE);
    Hl7AdtParse(msgBuf, msgLen, adt);

    // Patientenname und Bett ausgeben
    var fam: int64 := peek64(adt + HL7_ADT_PID + HL7_PID_FAMILY);
    var bed: int64 := peek64(adt + HL7_ADT_PV1 + HL7_PV1_LBED);

    // ACK senden
    var ackBuf: int64 := alloc(512);
    var ackLen: int64 := Hl7AckWrite(msh, "AA"c, "OK"c, ackBuf, 512);
    var outBuf: int64 := alloc(600);
    MllpFrameWrite(outBuf, 600, ackBuf, ackLen);

    free(outBuf, 600);
    free(ackBuf, 512);
    free(adt, HL7_ADT_SIZE);
    free(msh, HL7_MSH_SIZE);
}


Letzte Aktualisierung: 2026-08-16 — 27 Mathematik-Units aufgenommen (eigene Übersichtsseite, Gruppentabelle im Abschnitt Mathematik), Unit-Zahl auf 421 nachgezählt. Zuvor: Kategorien „Hardware — PCI“ und „Graphdatenbank„ ergänzt, Zahlen für Kryptografie, PDF, SVG und HL7 korrigiert, Import-Abschnitt richtiggestellt (Wildcard- und Namespace-Import gibt es nicht) und um die bekannten Symbolkollisionen erweitert. Geprüft mit lyxc 1.0.21A.