
Fortgeschrittene Lifetimes
Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL
1Was ist ein Higher-Ranked Trait Bound (HRTB) in Rust?
Was ist ein Higher-Ranked Trait Bound (HRTB) in Rust?
Antwort
Ein Higher-Ranked Trait Bound (HRTB) ermöglicht es anzugeben, dass eine Funktion oder ein Trait für alle möglichen Lifetimes funktionieren muss, nicht nur für ein bestimmtes. Die for<'a>-Syntax gibt an, dass der Trait Bound für jedes vom Aufrufer gewählte Lifetime 'a erfüllt sein muss. Diese Funktion ist unerlässlich für Closures und Callbacks, die Referenzen mit unterschiedlichen Lifetimes akzeptieren müssen.
2Was ist der Unterschied zwischen fn foo<'a>(f: impl Fn(&'a str)) und fn foo(f: impl for<'a> Fn(&'a str))?
Was ist der Unterschied zwischen fn foo<'a>(f: impl Fn(&'a str)) und fn foo(f: impl for<'a> Fn(&'a str))?
Antwort
Bei fn foo<'a> wird das Lifetime 'a vom Aufrufer zum Zeitpunkt des Aufrufs festgelegt und bleibt während der gesamten Ausführung gleich. Bei for<'a> muss die Closure für jedes Lifetime funktionieren, sodass sie mehrmals mit Referenzen unterschiedlicher Lifetimes aufgerufen werden kann. Diese Unterscheidung ist entscheidend für APIs, die eine Closure mehrmals mit unterschiedlichen temporären Referenzen aufrufen.
3Was ist Lifetime Subtyping in Rust und was bedeutet 'a: 'b?
Was ist Lifetime Subtyping in Rust und was bedeutet 'a: 'b?
Antwort
Lifetime Subtyping etabliert eine Subtyping-Beziehung zwischen Lifetimes. Die Notation 'a: 'b bedeutet, dass 'a mindestens so lange lebt wie 'b, sodass 'a ein Subtype von 'b ist. Eine Referenz mit einem längeren Lifetime kann dort verwendet werden, wo ein kürzeres Lifetime erwartet wird. Diese Beziehung ist covariant für unveränderliche Referenzen, sodass eine Referenz mit einem längeren Lifetime dort übergeben werden kann, wo ein kürzeres ausreichen würde.
Was ist Variance in Rust und wie wirkt sie sich auf generische Typen aus?
Warum ist &mut T in Bezug auf T invariant, während &T covariant ist?
+17 Interview-Fragen
Weitere Rust-Interviewthemen
Rust-Grundlagen
Ownership & Borrowing
Structs & Enums
Fehlerbehandlung
Collections
Module & Packages
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Makros
Serde & Serialisierung
Unsafe Rust
Fortgeschrittene Traits
Type System
Tokio & Async I/O
Performance-Optimierung
Memory Management
Web Frameworks
Database Integration
Rust Design Patterns
Meistere Rust für dein nächstes Interview
Zugang zu allen Fragen, Flashcards, technischen Tests, Code-Review-Übungen und Interview-Simulatoren.
Kostenlos starten