
Lifetimes Avanzados
Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL
1¿Qué es un Higher-Ranked Trait Bound (HRTB) en Rust?
¿Qué es un Higher-Ranked Trait Bound (HRTB) en Rust?
Respuesta
Un Higher-Ranked Trait Bound (HRTB) permite especificar que una función o un trait debe funcionar para todos los lifetimes posibles, no solo uno específico. La sintaxis for<'a> indica que el trait bound debe satisfacerse para cualquier lifetime 'a elegido por quien lo llama. Esta funcionalidad es esencial para las closures y los callbacks que necesitan aceptar referencias con lifetimes variados.
2¿Cuál es la diferencia entre fn foo<'a>(f: impl Fn(&'a str)) y fn foo(f: impl for<'a> Fn(&'a str))?
¿Cuál es la diferencia entre fn foo<'a>(f: impl Fn(&'a str)) y fn foo(f: impl for<'a> Fn(&'a str))?
Respuesta
Con fn foo<'a>, el lifetime 'a lo fija quien lo llama en el momento de la llamada y permanece igual durante toda la ejecución. Con for<'a>, la closure debe funcionar para cualquier lifetime, lo que permite llamarla varias veces con referencias de lifetimes diferentes. Esta distinción es crucial para las APIs que llaman a una closure varias veces con distintas referencias temporales.
3¿Qué es el lifetime subtyping en Rust y qué significa 'a: 'b?
¿Qué es el lifetime subtyping en Rust y qué significa 'a: 'b?
Respuesta
El lifetime subtyping establece una relación de subtyping entre lifetimes. La notación 'a: 'b significa que 'a vive al menos tanto como 'b, por lo que 'a es un subtype de 'b. Una referencia con un lifetime más largo puede usarse donde se espera un lifetime más corto. Esta relación es covariant para las referencias inmutables, lo que permite pasar una referencia con un lifetime más largo donde bastaría uno más corto.
¿Qué es la variance en Rust y cómo afecta a los tipos genéricos?
¿Por qué &mut T es invariant con respecto a T mientras que &T es covariant?
+17 preguntas de entrevista
Otros temas de entrevista Rust
Fundamentos de Rust
Ownership & Borrowing
Structs & Enums
Manejo de errores
Colecciones
Módulos y Paquetes
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Macros
Serde y serialización
Unsafe Rust
Traits avanzados
Type System
Tokio & Async I/O
Optimización de Rendimiento
Memory Management
Web Frameworks
Database Integration
Patrones de diseño en Rust
Domina Rust para tu próxima entrevista
Accede a todas las preguntas, flashcards, tests técnicos, ejercicios de code review y simuladores de entrevista.
Empieza gratis