AUTOSAR_AP_EXP_ARARustApplications
FIG-a6c3ad4b50e0316a
401 × 382 px
2 Release(s)
Figure 6.8: Detailed representation of generic trait and implementation
SHA-256 Inhalts-Fingerabdruck:
a6c3ad4b50e0316ac65c48d354db5b207d00f407f7d82ac783963754a0de1184
✦
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 unter Verwendung des AUTOSAR-spezifischen UML-Profils für Rust-Sprachkonstrukte (Stereotypen
«Trait»,«Struct»,«impl»mit Template-Bindungen). - Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Dokument
AUTOSAR_AP_EXP_ARARustApplications(Releases R23-11, R24-11), Kapitel zur formalen UML-Repräsentation von Rust-Code. - Technischer Zweck: Spezifikationsmuster zur Abbildung von parametrischer Polymorphie (Generics), Trait-Bounds (
Send,Display), Lifetimes ('a) und entkoppelten Implementierungsblöcken (impl Trait for Struct) im modellbasierten Architekturentwurf für Rust-basierte Adaptive Applications (ARA).
2. Komponenten, Entitäten & Schnittstellen
«Trait» Module3::Trait2:- Stereotyp & Modul:
«Trait»im Namespace/ModulModule3(Modellierung eines Rust-Traits als Interface-Konstrukt). - Generischer Parameter: Template-Parameter
T(im gestrichelten Parameter-Kasten). - Operationen:
+ convert_to(T): void– öffentliche Trait-Methode mit Übergabeparameter vom TypTund Rückgabetypvoid(entspricht()/ Unit in Rust).
- Stereotyp & Modul:
«Struct» Module3::Struct1:- Stereotyp & Modul:
«Struct»im Namespace/ModulModule3(Modellierung einer Rust-Datenstruktur). - Generischer Parameter & Bound:
T > Send(Notation für Trait-Bound-ConstraintT: Send, erzwingt Thread-Sicherheit bezüglich Ownership-Transfer). - Attribute:
+ var1: &'a T– öffentliches Feld mit expliziter Lifetime-Annotation'aauf eine unveränderliche Referenz vom TypT.
- Stereotyp & Modul:
«impl» Module3:- Stereotyp:
«impl»(Repräsentation eines konkreten Rust-Implementierungsblocks). - Beziehungen / Kanten:
- Realisierungspfeil (gestrichelt mit geschlossener, nicht ausgefüllter Spitze) zu
Module3::Trait2: Spezifiziert die Trait-Implementierung mit Parameter-Bindung< T->String >(Bindung des Trait-ParametersTanString). - Assoziations-/Bindungslinie (durchgezogen) zu
Module3::Struct1: Verbindet den Implementierungsblock mit der Zielstruktur unter Verschärfung der Typschranken auf< T->Send + Display >.
- Realisierungspfeil (gestrichelt mit geschlossener, nicht ausgefüllter Spitze) zu
- Stereotyp:
- Generierte Rust-Code-Entsprechung:
impl<'a, T> Module3::Trait2<String> for Module3::Struct1<'a, T> where T: Send + Display, { fn convert_to(&self, arg: String) { // Implementierung } }
3. Dynamisches Verhalten & Sequenzablauf
- Entfällt: Reines statisches Typ- und Strukturmodell.
- Compile-Time-Dispatch: Die Bindungen werden zur Übersetzungszeit monomorphisiert (
static dispatch). Es entsteht kein virtueller Methoden-Overhead (vtable/dyn Trait). - Kompilierzeit-Restriktionen: Typen, die für
Struct1instanziiert werden, müssen zur Compile-Zeit die Trait-KombinationSend + Displayerfüllen, andernfalls wird die Instanziierung vonconvert_todurch den Compiler (rustc) abgewiesen.
4. Normative Relevanz & Entwickler-Hinweise
- UML-zu-Rust-Modellierungsrichtlinie:
- In AUTOSAR Adaptive für Rust existiert keine C++-artige Klassenvererbung. Vererbungs- und Implementierungsbeziehungen müssen zwingend über explizite
«impl»-Artefakte modelliert werden, die Trait und Zielstruktur trennen.
- In AUTOSAR Adaptive für Rust existiert keine C++-artige Klassenvererbung. Vererbungs- und Implementierungsbeziehungen müssen zwingend über explizite
- Verschärfung von Trait-Bounds:
- Das Schaubild demonstriert normativ, dass ein
«impl»-Block restriktivere Bounds fordern darf als die Struktur selbst (Struct1verlangt primär nurSend, die Trait-ImplementierungTrait2<String>verlangt zusätzlichDisplay).
- Das Schaubild demonstriert normativ, dass ein
- Lifetime- und Referenzsemantik:
- Lifetimes (
'a) sind expliziter Bestandteil der UML-Typdefinition (&'a T). Code-Generatoren müssen daraus korrekte Lifetime-Parameter (<'a, T>) ableiten, um den Anforderungen des Rust Borrow-Checkers im generierten ARA-Stack zu genügen.
- Lifetimes (