📊 Capítulo 07: Lifetimes & Segurança de Memória
Especialização em Sistemas com Rust
🗺️ Como o Compilador Rastreia Lifetimes
flowchart TD
FN["Função que recebe duas referências (&'a str, &'a str) -> &'a str"]
--> BORROW_CHECKER["Borrow Checker do Rustc"]
--> INTERSECT["Calcula a Interseção dos Tempos de Vida de x e y"]
--> GUARANTEE["Garante que a referência retornada seja válida enquanto AMBOS existirem"]
style FN fill:#ede7f6,stroke:#512da8,stroke-width:2px
style BORROW_CHECKER fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style INTERSECT fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style GUARANTEE fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: O Que São Lifetimes?
-
Metadados de Compilação: Lifetimes NÃO alteram o tempo de vida do dado em tempo de execução.
- Contrato Explícito: Informam ao compilador como o tempo de vida de uma referência retornada se relaciona com os parâmetros de entrada.
🎯 Slide 2: Sintaxe de Anotação Genérica ('a)
fn maior_string<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
- Informa que a string retornada viverá pelo menos tanto tempo quanto o menor dos lifetimes entre
xey.
🎯 Slide 3: As Três Regras de Elision & 'static
-
Lifetime Elision: Em funções comuns com apenas uma referência de entrada, o compilador infere o lifetime automaticamente sem você precisar digitar
'a. - Lifetime
'static: A referência vive durante toda a execução do programa (ex.: literais de string"constante"gravados no binário).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim