
Zaawansowane Lifetime
Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL
1Czym jest Higher-Ranked Trait Bound (HRTB) w Rust?
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.
2Jaka jest różnica między fn foo<'a>(f: impl Fn(&'a str)) a fn foo(f: impl for<'a> Fn(&'a str))?
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.
3Czym jest lifetime subtyping w Rust i co oznacza 'a: 'b?
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.
Czym jest variance w Rust i jak wpływa na typy generyczne?
Dlaczego &mut T jest invariant względem T, podczas gdy &T jest covariant?
+17 pytań z rozmów
Inne tematy rekrutacyjne Rust
Podstawy Rusta
Ownership & Borrowing
Structs & Enums
Obsługa błędów
Kolekcje
Moduły i pakiety
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Makra
Serde i serializacja
Unsafe Rust
Zaawansowane traity
Type System
Tokio & Async I/O
Optymalizacja Wydajności
Memory Management
Web Frameworks
Database Integration
Wzorce projektowe w Rust
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