Rust

Zaawansowane Lifetime

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

20 pytań z rozmów·
Senior
1

Czym jest Higher-Ranked Trait Bound (HRTB) w Rust?

Odpowiedź

Higher-Ranked Trait Bound (HRTB) pozwala określić, że funkcja lub trait musi działać dla wszystkich możliwych lifetime, a nie tylko jednego konkretnego. Składnia for<'a> wskazuje, że trait bound musi być spełniony dla dowolnego lifetime 'a wybranego przez wywołującego. Ta funkcja jest niezbędna dla closure i callback, które muszą przyjmować referencje o różnych lifetime.

2

Jaka jest różnica między fn foo<'a>(f: impl Fn(&'a str)) a fn foo(f: impl for<'a> Fn(&'a str))?

Odpowiedź

W przypadku fn foo<'a> lifetime 'a jest ustalany przez wywołującego w momencie wywołania i pozostaje taki sam przez całe wykonanie. W przypadku for<'a> closure musi działać dla dowolnego lifetime, co pozwala wywoływać ją wielokrotnie z referencjami o różnych lifetime. To rozróżnienie jest kluczowe dla API, które wielokrotnie wywołują closure z różnymi tymczasowymi referencjami.

3

Czym jest lifetime subtyping w Rust i co oznacza 'a: 'b?

Odpowiedź

Lifetime subtyping ustanawia relację subtyping między lifetime. Notacja 'a: 'b oznacza, że 'a żyje co najmniej tak długo jak 'b, więc 'a jest subtype 'b. Referencja z dłuższym lifetime może być użyta tam, gdzie oczekiwany jest krótszy lifetime. Ta relacja jest covariant dla niezmiennych referencji, co pozwala przekazać referencję z dłuższym lifetime tam, gdzie wystarczyłaby krótsza.

4

Czym jest variance w Rust i jak wpływa na typy generyczne?

5

Dlaczego &mut T jest invariant względem T, podczas gdy &T jest covariant?

+17 pytań z rozmów

Opanuj Rust na następną rozmowę

Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.

Zacznij za darmo