Rust

Просунуті Lifetimes

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

20 питань зі співбесід·
Senior
1

Що таке Higher-Ranked Trait Bound (HRTB) в Rust?

Відповідь

Higher-Ranked Trait Bound (HRTB) дозволяє вказати, що функція або trait має працювати для всіх можливих lifetimes, а не лише для одного конкретного. Синтаксис for<'a> вказує, що trait bound має задовольнятися для будь-якого lifetime 'a, обраного викликачем. Ця можливість є важливою для closure та callback, які мають приймати посилання з різними lifetimes.

2

Яка різниця між fn foo<'a>(f: impl Fn(&'a str)) і fn foo(f: impl for<'a> Fn(&'a str))?

Відповідь

З fn foo<'a> lifetime 'a фіксується викликачем у момент виклику й залишається незмінним протягом усього виконання. З for<'a> closure має працювати для будь-якого lifetime, що дозволяє викликати її кілька разів із посиланнями різних lifetimes. Ця відмінність є критично важливою для API, які викликають closure кілька разів із різними тимчасовими посиланнями.

3

Що таке lifetime subtyping в Rust і що означає 'a: 'b?

Відповідь

Lifetime subtyping встановлює відношення subtyping між lifetimes. Запис 'a: 'b означає, що 'a живе щонайменше стільки ж, скільки 'b, тому 'a є subtype для 'b. Посилання з довшим lifetime можна використовувати там, де очікується коротший lifetime. Це відношення є covariant для незмінних посилань, що дозволяє передавати посилання з довшим lifetime туди, де достатньо коротшого.

4

Що таке variance в Rust і як вона впливає на generic-типи?

5

Чому &mut T є invariant щодо T, тоді як &T є covariant?

+17 питань зі співбесід

Опануй Rust для наступної співбесіди

Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.

Почни безкоштовно