====== 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 ...
}