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