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