In Lyx wird zwischen Builtins (direkt im Compiler-Kern enthalten) und Standard-Units (in .lyx-Dateien definiert) unterschieden. Alle Funktionen folgen nun konsequent der PascalCase-Schreibweise.
Builtins benötigen keinen Import. Sie werden vom Backend direkt in effiziente Syscalls oder spezialisierte Inline-Assembler-Routinen übersetzt.
| Funktion | Signatur | Beschreibung |
|---|---|---|
| Exit | `(code: int64): void` | Beendet das Programm mit dem angegebenen Statuscode. |
| PrintStr | `(s: pchar): void` | Gibt einen nullterminierten String (C-Style) auf STDOUT aus. |
| PrintInt | `(x: int64): void` | Wandelt eine Ganzzahl in ASCII um und gibt sie aus. |
| PrintFloat | `(x: f64): void` | Gibt eine Fließkommazahl (f64) aus. |
| Funktion | Signatur | Beschreibung | |
|---|---|---|---|
| Abs | `(x: int64): int64` | Liefert den absoluten Wert (Betrag) einer Ganzzahl. | |
| Sqrt | `(x: f64): f64` | Berechnet die Quadratwurzel (nutzt native FPU/SSE Instruktion). | |
| Random | `(): int64` | Liefert eine Pseudo-Zufallszahl ($0$ bis $2 | {31}-1$). |
| RandomSeed | `(seed: int64): void` | Initialisiert den Zufallsgenerator (LCG) mit einem Startwert. |
Import: `import std.Math;`
Import: `import std.String;`
Um die Konsistenz innerhalb des Ökosystems zu wahren, nutzt Lyx ab v0.1.7 folgende Konventionen:
| Element | Stil | Beispiel |
|---|---|---|
| Funktionen / Methoden | PascalCase | `PrintStr`, `Create`, `Factorial` |
| Typen / Klassen | PascalCase | `TPlayer`, `Int64`, `Node` |
| Variablen / Parameter | camelCase | `counter`, `newName`, `resultValue` |
| Konstanten | UPPER_CASE | `MAX_LIMIT`, `PI`, `BUFFER_SIZE` |
| Keywords | lowercase | `fn`, `var`, `class`, `if`, `let` |
Dieses Beispiel zeigt die Integration von Builtins und Unit-Funktionen unter Einhaltung der Benennungsrichtlinien:
unit MyApp;
import std.Math;
fn Main(): int64 {
let input: int64 := -42;
var result: int64 := Abs(input); // Nutzung eines Builtins
// Nutzung einer Funktion aus std.Math
if (IsEven(result)) {
PrintStr("Die Zahl ");
PrintInt(result);
PrintStr(" ist gerade.");
}
return 0;
}