📊 Capítulo 06: Borrowing & Referências
Especialização em Sistemas com Rust
🗺️ As Regras de Ouro do Borrow Checker
flowchart TD
DADO["Valor na Memória"]
--> REGRA{"Qual o tipo de empréstimo (Borrow)?"}
REGRA --> |"Leitura Compartilhada"| IMUT["Múltiplas Referências Imutáveis (&T)\n- Vários leitores simultâneos permitidos"]
REGRA --> |"Escrita Exclusiva"| MUT["EXATAMENTE UMA Referência Mutável (&mut T)\n- Zero outros leitores ou escritores no mesmo escopo!"]
style DADO fill:#ede7f6,stroke:#512da8,stroke-width:2px
style REGRA fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style IMUT fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style MUT fill:#ffebee,stroke:#d32f2f,stroke-width:2px
🎯 Slide 1: Referências Imutáveis (&T)
fn calcular_tamanho(s: &String) -> usize {
s.len() // Lê o dado sem tomar posse (Borrowing)
} // s sai de escopo, mas como é uma referência, a String NÃO é destruída!
- Permite compartilhar acesso de leitura a estruturas de dados gigantes sem alocar memória nem clonar bytes.
🎯 Slide 2: Referências Mutáveis Exclusivas (&mut T)
fn adicionar_sufixo(s: &mut String) {
s.push_str(" [Processado]");
}
- Anti-Data Race Garantido: Impede que uma thread modifique um vetor enquanto outra thread está iterando sobre seus elementos.
🎯 Slide 3: O Fim dos Ponteiros Pendentes (Dangling Pointers)
// fn criar_ponteiro_invalido() -> &String {
// let s = String::from("teste");
// &s // ERRO: s é destruída ao fechar a chave, &s apontaria para lixo!
// }
- O compilador Rust garante que uma referência NUNCA sobreviva mais tempo do que o dado para o qual ela aponta!
🔗 Navegação do Capítulo 06
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim