
Lifetime Avanzati
Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL
1Che cos'è un Higher-Ranked Trait Bound (HRTB) in Rust?
Che cos'è un Higher-Ranked Trait Bound (HRTB) in Rust?
Risposta
Un Higher-Ranked Trait Bound (HRTB) permette di specificare che una funzione o un trait deve funzionare per tutti i lifetime possibili, non solo per uno specifico. La sintassi for<'a> indica che il trait bound deve essere soddisfatto per qualsiasi lifetime 'a scelto dal chiamante. Questa funzionalità è essenziale per le closure e i callback che devono accettare riferimenti con lifetime variabili.
2Qual è la differenza tra fn foo<'a>(f: impl Fn(&'a str)) e fn foo(f: impl for<'a> Fn(&'a str))?
Qual è la differenza tra fn foo<'a>(f: impl Fn(&'a str)) e fn foo(f: impl for<'a> Fn(&'a str))?
Risposta
Con fn foo<'a>, il lifetime 'a viene fissato dal chiamante al momento della chiamata e rimane lo stesso per tutta l'esecuzione. Con for<'a>, la closure deve funzionare per qualsiasi lifetime, consentendo di chiamarla più volte con riferimenti di lifetime diversi. Questa distinzione è cruciale per le API che chiamano una closure più volte con riferimenti temporanei diversi.
3Che cos'è il lifetime subtyping in Rust e cosa significa 'a: 'b?
Che cos'è il lifetime subtyping in Rust e cosa significa 'a: 'b?
Risposta
Il lifetime subtyping stabilisce una relazione di subtyping tra lifetime. La notazione 'a: 'b significa che 'a vive almeno quanto 'b, quindi 'a è un subtype di 'b. Un riferimento con un lifetime più lungo può essere usato dove ci si aspetta un lifetime più corto. Questa relazione è covariant per i riferimenti immutabili, consentendo di passare un riferimento con un lifetime più lungo dove ne basterebbe uno più corto.
Che cos'è la variance in Rust e come influisce sui tipi generici?
Perché &mut T è invariant rispetto a T mentre &T è covariant?
+17 domande da colloquio
Altri argomenti di colloquio Rust
Fondamenti di Rust
Ownership & Borrowing
Structs & Enums
Gestione degli errori
Collezioni
Moduli e package
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Macro
Serde e serializzazione
Unsafe Rust
Trait avanzati
Type System
Tokio & Async I/O
Ottimizzazione delle Prestazioni
Memory Management
Web Frameworks
Database Integration
Design Pattern in Rust
Padroneggia Rust per il tuo prossimo colloquio
Accedi a tutte le domande, flashcards, test tecnici, esercizi di code review e simulatori di colloquio.
Inizia gratis