Rust

Lifetimes Avanzados

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

20 preguntas de entrevista·
Senior
1

¿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))?

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?

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.

4

¿Qué es la variance en Rust y cómo afecta a los tipos genéricos?

5

¿Por qué &mut T es invariant con respecto a T mientras que &T es covariant?

+17 preguntas de entrevista

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