Lyx – Attribute & Pragmas (@-Referenz)

Attribute (auch Pragmas genannt) sind Compiler-Anweisungen, die mit @ beginnen und vor einer Deklaration stehen. Sie steuern Optimierungen, Sicherheits-Verifikation, Speicherlayout und FFI-Verhalten. Attribute verändern nie die Semantik des Programms für korrekte Eingaben — sie sind Zusatzinformationen für den Compiler, nicht für den Laufzeit-Interpreter.

Compiler-Flags (CLI) · DO-178C Compliance · Energy-Aware Modell · FFI – C-Interop


Übersicht

Alle Attribute auf einen Blick:

Attribut Ziel Kategorie Beschreibung
@dal(A–D) Unit, Fn Safety Design Assurance Level nach DO-178C
@flight_crit Unit, Fn Safety Strikte Luftfahrt-Regeln (kein Heap, kein FP-Opt)
@integrity(…) Unit, Fn Safety Memory Scrubbing oder Software Lockstep
@redundant Variable Safety Triple Modular Redundancy (TMR)
@stack_limit(N) Fn Safety Maximaler Stack-Verbrauch in Bytes
@wcet(N) Fn Safety Worst-Case Execution Time in Zyklen
@energy(1–5) Unit, Fn Performance Energy-Aware-Backend-Level
@inline Fn Performance Inlining erzwingen
@noinline Fn Performance Inlining verbieten
@no_opt Fn Performance Alle IR-Optimierungen deaktivieren
@parallel Loop, Array Performance SIMD-Vektorisierung erlauben
@section(„name“) Fn, Var Layout ELF-Sektion explizit setzen
@packed Struct Layout Struct-Padding unterdrücken
@at(N) Struct-Feld Layout Explizites Byte-Offset eines Struct-Felds
@big_endian Struct-Feld Layout Mehrbyte-Feld als Big-Endian interpretieren
@volatile Variable FFI Speicherzugriff nicht wegoptimieren
@extern Fn FFI Externe C/Assembly-Funktion deklarieren
@export Fn, Var FFI Symbol in Shared Library exportieren
@stdcall Fn FFI

@extern
@stdcall
fn MessageBoxA(hwnd: int64, text: pchar, caption: pchar, utype: int64): int64;

@extern
@stdcall
fn CreateFileA(lpFileName: pchar, dwAccess: int64, dwShare: int64,
               lpSecurity: int64, dwCreation: int64, dwFlags: int64,
               hTemplate: int64): int64;


@variadic

Markiert eine Funktion als C-varargs-Wrapper. Ermöglicht die Weitergabe variabler Argumentlisten an externe C-Funktionen.

@extern
@variadic
fn printf(fmt: pchar): int64;

@extern
@variadic
fn snprintf(buf: pchar, size: int64, fmt: pchar): int64;

  • Lyx selbst hat keine variadischen Funktionen — @variadic ist ausschließlich für @extern-Deklarationen
  • Typunsicher: Argumente werden nicht vom Compiler geprüft

Kombinations-Regeln

Nicht alle Attribute sind kompatibel. Hier die wichtigsten Einschränkungen:

Kombination Erlaubt? Hinweis
@flight_crit + @energy(1) @energy(1) ist implizit, explizit redundant aber harmlos
@flight_crit + @energy(2) Erfordert @dal(B) oder explizite @allow_unsafe-Begründung
@flight_crit + @energy(4/5) Compiler-Fehler: widerspricht der No-Speculation-Anforderung
@integrity(lockstep) + @inline Lockstep erfordert definierte Call-Grenzen
@integrity(lockstep) + @extern Externe Funktionen können nicht dupliziert werden
@redundant auf Stack-Variable Nur für global/Unit-Level
@parallel + @no_opt @no_opt deaktiviert SIMD-Vektorisierung
@dal(A) + unsafe (ohne @allow_unsafe) Compiler-Fehler
@packed + @section Häufige Kombination für Hardware-Register-Structs
@at(N) + @packed @packed entfernt implizites Padding; @at legt Positionen absolut fest
@at(N) + @big_endian Standardkombination für Netzwerk-Header-Felder
@big_endian ohne @at(N) Compiler-Fehler: Offset-Angabe fehlt
@at(N) + Feld ohne @at in derselben Struct Compiler-Fehler: gemischtes Layout nicht erlaubt
@volatile + @no_opt Maximale Garantie gegen Compiler-Umordnung
@extern + @stdcall Standard für Windows-API
@extern + @variadic Standard für printf-Familie

Weiterführende Seiten