DEENESPTFRRUARHIKOZHNL
AUTOSAR_AP_EXP_ARARustApplications FIG-d882559dba464f96 428 × 278 px 3 Release(s)

Figure 6.2: Struct and inherent implementation

SHA-256 Inhalts-Fingerabdruck: d882559dba464f968f7c6785a48a3a4c929f9097a2807823adbc2a13906d6cb4
✦ KI-generierte Bildanalyse & technische Beschreibung Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07

1. Diagrammtyp & Architektur-Kontext

  • Klassifikation: UML-Klassendiagramm mit proprietärem Stereotypen-Profil für das Rust-Typsystem (Struktur- und Schnittstellenmodellierung).
  • Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Dokument AUTOSAR_AP_EXP_ARARustApplications (Dokument-ID 1079, gültig für R23-11, R24-11, R25-11).
  • Technischer Zweck: Definition der normativ-semantischen Abbildung von Rust-Sprachkonstrukten auf UML-Artefakte. Da klassische UML-Klassen auf objektorientierte Paradigmen (C++) ausgelegt sind, spezifiziert dieses Diagramm das einheitliche Mapping für Datenstrukturen (struct) und deren inhärente Implementierungsblöcke (impl MyStruct { ... }) im modellbasierten Software-Design von Adaptive Applications (AAs).

2. Komponenten, Entitäten & Schnittstellen

  • Entität / Basistyp:
    • «Struct» module1::MyStruct: Repräsentiert eine Rust-Strukturdeklaration innerhalb des Modulpfads/Namespace module1.
  • Attribute (Field Compartment):
    • + field1: u32: Öffentliches Feld (pub field1: u32) mit primitivem Unsigned-32-Bit-Typ. Sichtbarkeitsmodifikator + mappt direkt auf pub, das Fehlen eines Modifikators würde der standardmäßigen Modulprivatheit entsprechen.
  • Operationen & assoziierte Funktionen (Inherent Implementation Compartment):
    • - method2(self: &): Private Instanzmethode (fn method2(&self)). Der Parameter self: & modelliert eine unveränderliche Ausleihe (shared/immutable borrow).
    • + func1(): Öffentliche assoziierte Funktion (pub fn func1()). Das Fehlen eines self-Receivers kennzeichnet eine statische Funktion bzw. einen Konstruktor (Aufruf via module1::MyStruct::func1()).
    • «async» + method1(self: &mut, p1: u32, p2: &mut u32, p3: &'a u16):
      • «async»: Kennzeichnet eine asynchrone Funktion (pub async fn method1(...)), deren Rückgabetyp implizit einen Future darstellt.
      • self: &mut: Exklusive veränderliche Ausleihe (mutable borrow).
      • p1: u32: Pass-by-Value (Copy-Semantik des Primitivtyps).
      • p2: &mut u32: Veränderliche Referenz auf einen 32-Bit-Ganzzahlwert.
      • p3: &'a u16: Unveränderliche Referenz mit expliziter Lebenszeit-Annotation ('a) zur formalen Modellierung von Lifetimes im UML-Design.
    • «extern "C"» + my_extern_func():
      • «extern "C"»: Spezifiziert die FFI-ABI-Konvention (pub extern "C" fn my_extern_func()). Dient dem Linken gegen C/C++-Artefakte ohne Name-Mangling.
    • «unsafe» + my_unsafe func():
      • «unsafe»: Deklariert eine ungesicherte Funktion (pub unsafe fn my_unsafe_func()), die dereferenzierte Roh-Zeiger, direkte Speicherzugriffe oder FFI kapselt und vom Aufrufer einen unsafe-Block verlangt.

3. Dynamisches Verhalten & Sequenzablauf (falls zutreffend)

  • Synchroner Pfad:
    • method2, func1, my_extern_func und my_unsafe func blockieren den ausführenden Thread synchron bis zur Rückkehr.
  • Asynchroner Pfad & Task-Scheduling:
    • «async» method1: Erzeugt bei Aufruf einen Zustandsautomaten (Future), der an den asynchronen ARA-Executor übergeben wird. Die Ausführung wird bei I/O- oder Event-Abhängigkeiten suspendiert (Poll::Pending), wodurch der OS-Thread für andere Tasks freigegeben wird. Das Aufwecken erfolgt über den verknüpften Waker.
  • Borrow-Checker-Restriktionen:
    • Aufrufe von method1 schließen aufgrund von self: &mut jeden parallelen Zugriff auf dieselbe Instanz von MyStruct strikt aus (Compiler-erzwungener Daten-Race-Ausschluss).
    • Parallele Aufrufe von method2 (self: &) sind thread-übergreifend zulässig, sofern der Typ Sync implementiert.

4. Normative Relevanz & Entwickler-Hinweise

  • Generatoren & Tooling: UML-Modelle dieses Formats dienen Codegeneratoren (ARXML-zu-Rust / Franca-zu-Rust Bindings) als Eingabe zur exakten Generierung von Funktionssignaturen inklusive Lifetime-Parametern ('a) und Mutability-Garantien.
  • Schnittstelle zum C++-ARA-Core:
    • «extern "C"» ist die zwingende Brücke für Interoperabilität mit dem bestehenden AUTOSAR-C++14-Stack (ara::core, ara::com, Adaptive Platform OS / POSIX).
    • Rust-Entwickler müssen sicherstellen, dass über FFI-Grenzen übergebene Typen FFI-sicher (#[repr(C)]) sind.
  • Funktionale Sicherheit (ISO 26262):
    • Methoden unter «unsafe» markieren explizite Sicherheitsgrenzen. Für diese existiert in ASIL-relevanten Systemen eine Nachweispflicht: Sie erfordern dedizierte Begründungen im Safety Manual sowie isolierte Unit-Tests mit verifizierten Vor- und Nachbedingungen.
  • Architektureinschränkung:
    • Im Gegensatz zu C++-UML-Klassen dürfen diese Operationen nicht als virtuelle Methoden oder Basisklassen-Polymorphie interpretiert werden. Dynamischer Dispatch in Rust wird ausschließlich über separate «Trait»-Diagramme abgebildet.

Vorkommen in AUTOSAR-Releases (3)

Release Dokument Seite Nr. Bildunterschrift im Dokument
R23-11 AUTOSAR_AP_EXP_ARARustApplications S. 30 6.2 Figure 6.2: Struct and inherent implementation
R24-11 AUTOSAR_AP_EXP_ARARustApplications S. 30 6.2 Figure 6.2: Struct and inherent implementation
R25-11 AUTOSAR_AP_EXP_ARARustApplications S. 30 6.2 Figure 6.2: Struct and inherent implementation