
Просунуті Lifetimes
Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL
1Що таке Higher-Ranked Trait Bound (HRTB) в Rust?
Що таке 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>(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 в Rust і що означає 'a: 'b?
Відповідь
Lifetime subtyping встановлює відношення subtyping між lifetimes. Запис 'a: 'b означає, що 'a живе щонайменше стільки ж, скільки 'b, тому 'a є subtype для 'b. Посилання з довшим lifetime можна використовувати там, де очікується коротший lifetime. Це відношення є covariant для незмінних посилань, що дозволяє передавати посилання з довшим lifetime туди, де достатньо коротшого.
Що таке variance в Rust і як вона впливає на generic-типи?
Чому &mut T є invariant щодо T, тоді як &T є covariant?
+17 питань зі співбесід
Інші теми співбесід Rust
Основи Rust
Ownership & Borrowing
Structs & Enums
Обробка помилок
Колекції
Модулі та пакети
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Макроси
Serde та серіалізація
Unsafe Rust
Просунуті trait'и
Type System
Tokio & Async I/O
Оптимізація продуктивності
Memory Management
Web Frameworks
Database Integration
Патерни проєктування Rust
Опануй Rust для наступної співбесіди
Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.
Почни безкоштовно