Rust

Fortgeschrittene Lifetimes

Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL

20 Interview-Fragen·
Senior
1

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.

2

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.

3

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.

4

Was ist Variance in Rust und wie wirkt sie sich auf generische Typen aus?

5

Warum ist &mut T in Bezug auf T invariant, während &T covariant ist?

+17 Interview-Fragen

Meistere Rust für dein nächstes Interview

Zugang zu allen Fragen, Flashcards, technischen Tests, Code-Review-Übungen und Interview-Simulatoren.

Kostenlos starten