Rust

Lifetime Avanzati

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

20 domande da colloquio·
Senior
1

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.

2

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.

3

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.

4

Che cos'è la variance in Rust e come influisce sui tipi generici?

5

Perché &mut T è invariant rispetto a T mentre &T è covariant?

+17 domande da colloquio

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