Lyx – Attribute & Pragmas (@-Referenz)
In Lyx werden Metadaten und Compiler-Anweisungen über Attribute (auch Pragmas genannt) gesteuert. Sie beginnen immer mit einem @-Zeichen und können auf Units, Funktionen oder Variablen angewendet werden.
1. Sicherheits- & Integritäts-Attribute
Diese Attribute steuern die Hardware-Fehlertoleranz und die Einhaltung von Sicherheitsstandards.
| Attribut | Ziel | Beschreibung |
|---|---|---|
| @integrity | Unit, Fn | Aktiviert Prüfsummen-Überwachung. Modi: scrubbed (Hintergrund-Scan) oder lockstep (Duo-Core Vergleich). |
| @redundant | Variable | Markiert eine Variable für Triple Modular Redundancy (TMR). Der Wert wird dreifach im RAM abgelegt und bei jedem Zugriff „gevotet“. |
| @flight_crit | Unit, Fn | Aktiviert strikte Luftfahrt-Regeln: Verbot von dynamischem Heap, Deaktivierung von Floating-Point-Optimierungen. |
| @stack_limit | Funktion | Setzt ein hartes Limit für den Stack-Verbrauch in Bytes. Wird durch –stack-check validiert. |
| @dal(A-D) | Unit, Fn | Definiert das Design Assurance Level nach DO-178C. Beeinflusst die Strenge der Linter-Prüfungen. |
2. Performance & Code-Generierung
Steuerung des Backends für Optimierung und Inlining.
| Attribut | Ziel | Beschreibung |
|---|---|---|
| @inline | Funktion | Erzwingt das Inlining der Funktion (ersetzt den Aufruf durch den Funktionskörper), um Call-Overhead zu sparen. |
| @no_opt | Funktion | Deaktiviert alle Optimierungen für diesen spezifischen Block (wichtig für Timing-relevante Hardware-Treiber). |
| @parallel | Loop, Arr | Signalisiert dem Compiler, dass der folgende Abschnitt sicher für SIMD-Vektorisierung (AVX/Neon) ist. |
| @section | Funktion | Platziert den Code in einer spezifischen ELF-Sektion (z. B. @section(„.slow_mem“)). |
3. Energie-Management
Beeinflusst, wie das Energy-Aware Backend den Maschinencode für die Zielhardware gewichtet.
@energy(level: 1) // Fokus auf minimalen Verbrauch
fn LowPowerTask() { ... }
@energy(level: 5) // Fokus auf maximale Performance
fn HighThroughputTask() { ... }
- Level 1-2: Reduziert Loop Unrolling, bevorzugt Low-Power Instruktionen.
- Level 4-5: Aggressives Unrolling, nutzt alle verfügbaren Rechenwerke (FPU/SIMD) gleichzeitig.
4. Interoperabilität (FFI)
Für die Zusammenarbeit mit bestehendem C-Code oder Hardware-Registern.
| Attribut | Ziel | Beschreibung |
|---|---|---|
| @extern | Funktion | Deklariert eine Funktion, die in einer externen Bibliothek (C/C++) definiert ist. |
| @volatile | Variable | Verhindert, dass der Compiler Lese-/Schreibzugriffe wegoptimiert (essentiell für Memory Mapped I/O). |
| @packed | Struct | Verhindert Padding in Strukturen, um exakt dem Hardware-Layout zu entsprechen. |
5. Beispiel: Kombination von Attributen
In hochkritischen Systemen werden oft mehrere Attribute kombiniert, um maximale Sicherheit zu garantieren:
@flight_crit
@stack_limit(512)
@integrity(mode: lockstep)
fn ProcessFlightData(input: f64) {
@redundant
var current_heading: f64 := input;
// ... Logik ...
}
