Rust

Geavanceerde Lifetimes

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

20 gespreksvragen·
Senior
1

Wat is een Higher-Ranked Trait Bound (HRTB) in Rust?

Antwoord

Een Higher-Ranked Trait Bound (HRTB) maakt het mogelijk om aan te geven dat een functie of trait moet werken voor alle mogelijke lifetimes, niet alleen een specifieke. De for<'a>-syntaxis geeft aan dat de trait bound moet worden voldaan voor elke lifetime 'a die door de aanroeper wordt gekozen. Deze functie is essentieel voor closures en callbacks die referenties met verschillende lifetimes moeten accepteren.

2

Wat is het verschil tussen fn foo<'a>(f: impl Fn(&'a str)) en fn foo(f: impl for<'a> Fn(&'a str))?

Antwoord

Bij fn foo<'a> wordt de lifetime 'a door de aanroeper vastgelegd op het moment van aanroep en blijft deze gelijk gedurende de hele uitvoering. Bij for<'a> moet de closure voor elke lifetime werken, waardoor deze meerdere keren kan worden aangeroepen met referenties van verschillende lifetimes. Dit onderscheid is cruciaal voor API's die een closure meerdere keren aanroepen met verschillende tijdelijke referenties.

3

Wat is lifetime subtyping in Rust en wat betekent 'a: 'b?

Antwoord

Lifetime subtyping legt een subtyping-relatie tussen lifetimes vast. De notatie 'a: 'b betekent dat 'a minstens zo lang leeft als 'b, dus 'a is een subtype van 'b. Een referentie met een langere lifetime kan worden gebruikt waar een kortere lifetime wordt verwacht. Deze relatie is covariant voor onveranderlijke referenties, waardoor een referentie met een langere lifetime kan worden doorgegeven waar een kortere zou volstaan.

4

Wat is variance in Rust en hoe beïnvloedt het generieke typen?

5

Waarom is &mut T invariant met betrekking tot T terwijl &T covariant is?

+17 gespreksvragen

Beheers Rust voor je volgende gesprek

Krijg toegang tot alle vragen, flashcards, technische tests, code review-oefeningen en gespreksimulatoren.

Begin gratis