Lyx – Standard Library & Units
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.
1) Builtins (Global verfügbar)
Builtins benötigen keinen Import. Sie werden vom Backend direkt in effiziente Syscalls oder spezialisierte Inline-Assembler-Routinen übersetzt.
I/O & System (io.lyx)
| 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. |
Mathematik & Zufall (math.lyx)
| 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. |
2) Standard Units (Erfordert Import)
Unit: std.Math
Import: `import std.Math;`
- Min64 / Max64: Vergleich von zwei Ganzzahlen; liefert den kleineren bzw. größeren Wert.
- Pow: Potenzberechnung ($base^{exp}$) für Fließkommazahlen.
- IsEven: Hilfsfunktion, die `true` zurückgibt, wenn eine Zahl ohne Rest durch 2 teilbar ist.
Unit: std.String
Import: `import std.String;`
- StrLen: Berechnet die Anzahl der Zeichen vor dem Null-Terminator (`\0`).
- StrComp: Lexikografischer Vergleich zweier Strings (0 bei Gleichheit).
- IntToStr: Konvertiert einen Integer in einen temporären `pchar` zur Textmanipulation.
3) Design-Richtlinie: Benennung (PascalCase)
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` |
4) Code-Beispiel: PascalCase in Aktion
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;
}
