Rust

Lifetimes Avançados

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

20 perguntas de entrevista·
Senior
1

O que é um Higher-Ranked Trait Bound (HRTB) em Rust?

Resposta

Um Higher-Ranked Trait Bound (HRTB) permite especificar que uma função ou um trait deve funcionar para todos os lifetimes possíveis, não apenas um específico. A sintaxe for<'a> indica que o trait bound deve ser satisfeito para qualquer lifetime 'a escolhido por quem chama. Esse recurso é essencial para closures e callbacks que precisam aceitar referências com lifetimes variados.

2

Qual é a diferença entre fn foo<'a>(f: impl Fn(&'a str)) e fn foo(f: impl for<'a> Fn(&'a str))?

Resposta

Com fn foo<'a>, o lifetime 'a é fixado por quem chama no momento da chamada e permanece o mesmo durante toda a execução. Com for<'a>, a closure deve funcionar para qualquer lifetime, permitindo chamá-la várias vezes com referências de lifetimes diferentes. Essa distinção é crucial para APIs que chamam uma closure várias vezes com diferentes referências temporárias.

3

O que é lifetime subtyping em Rust e o que significa 'a: 'b?

Resposta

O lifetime subtyping estabelece uma relação de subtyping entre lifetimes. A notação 'a: 'b significa que 'a vive pelo menos tanto quanto 'b, portanto 'a é um subtype de 'b. Uma referência com um lifetime mais longo pode ser usada onde um lifetime mais curto é esperado. Essa relação é covariant para referências imutáveis, permitindo passar uma referência com um lifetime mais longo onde um mais curto bastaria.

4

O que é variance em Rust e como ela afeta os tipos genéricos?

5

Por que &mut T é invariant em relação a T enquanto &T é covariant?

+17 perguntas de entrevista

Domine Rust para sua proxima entrevista

Acesse todas as perguntas, flashcards, testes tecnicos, exercicios de code review e simuladores de entrevista.

Comece gratis