
Lifetimes Avancés
Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL
1Qu'est-ce qu'un Higher-Ranked Trait Bound (HRTB) en Rust ?
Qu'est-ce qu'un Higher-Ranked Trait Bound (HRTB) en Rust ?
Réponse
Un Higher-Ranked Trait Bound (HRTB) permet de spécifier qu'une fonction ou un trait doit fonctionner pour tous les lifetimes possibles, pas seulement un lifetime spécifique. La syntaxe for<'a> indique que le bound doit être satisfait pour n'importe quel lifetime 'a choisi par l'appelant. Cette fonctionnalité est essentielle pour les closures et les callbacks qui doivent accepter des références avec des lifetimes variés.
2Quelle est la différence entre fn foo<'a>(f: impl Fn(&'a str)) et fn foo(f: impl for<'a> Fn(&'a str)) ?
Quelle est la différence entre fn foo<'a>(f: impl Fn(&'a str)) et fn foo(f: impl for<'a> Fn(&'a str)) ?
Réponse
Avec fn foo<'a>, le lifetime 'a est fixé par l'appelant au moment de l'appel et reste le même pour toute la durée de l'exécution. Avec for<'a>, la closure doit fonctionner pour n'importe quel lifetime, permettant de l'appeler plusieurs fois avec des références de lifetimes différents. Cette distinction est cruciale pour les APIs qui appellent une closure plusieurs fois avec des références temporaires différentes.
3Qu'est-ce que le lifetime subtyping en Rust et que signifie 'a: 'b ?
Qu'est-ce que le lifetime subtyping en Rust et que signifie 'a: 'b ?
Réponse
Le lifetime subtyping établit une relation de sous-typage entre lifetimes. La notation 'a: 'b signifie que 'a vit au moins aussi longtemps que 'b, donc 'a est un sous-type de 'b. Une référence avec un lifetime plus long peut être utilisée là où un lifetime plus court est attendu. Cette relation est covariant pour les références immutables, permettant de passer une référence avec un lifetime plus long là où un plus court suffirait.
Qu'est-ce que la variance en Rust et comment affecte-t-elle les types génériques ?
Pourquoi &mut T est-il invariant par rapport à T alors que &T est covariant ?
+17 questions d'entretien
Autres sujets d'entretien Rust
Les bases de Rust
Ownership & Borrowing
Structs & Enums
Gestion des erreurs
Collections
Modules & Packages
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Macros
Serde & Serialization
Unsafe Rust
Traits Avancés
Type System
Tokio & Async I/O
Optimisation de Performance
Memory Management
Web Frameworks
Database Integration
Design Patterns Rust
Maîtrise Rust pour ton prochain entretien
Accède à toutes les questions, flashcards, tests techniques, exercices de code review et simulateurs d'entretien.
Commencer gratuitement