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/Namespacemodule1.
- Attribute (Field Compartment):
+ field1: u32: Öffentliches Feld (pub field1: u32) mit primitivem Unsigned-32-Bit-Typ. Sichtbarkeitsmodifikator+mappt direkt aufpub, 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 Parameterself: &modelliert eine unveränderliche Ausleihe (shared/immutable borrow).+ func1(): Öffentliche assoziierte Funktion (pub fn func1()). Das Fehlen einesself-Receivers kennzeichnet eine statische Funktion bzw. einen Konstruktor (Aufruf viamodule1::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 einenFuturedarstellt.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 einenunsafe-Block verlangt.
3. Dynamisches Verhalten & Sequenzablauf (falls zutreffend)
- Synchroner Pfad:
method2,func1,my_extern_funcundmy_unsafe funcblockieren 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üpftenWaker.
- Borrow-Checker-Restriktionen:
- Aufrufe von
method1schließen aufgrund vonself: &mutjeden parallelen Zugriff auf dieselbe Instanz vonMyStructstrikt aus (Compiler-erzwungener Daten-Race-Ausschluss). - Parallele Aufrufe von
method2(self: &) sind thread-übergreifend zulässig, sofern der TypSyncimplementiert.
- Aufrufe von
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.
- Methoden unter
- 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.
- 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