Iniciante Fundamentos
Ownership
Ownership (posse) é o recurso central do Rust que garante segurança de memória sem coletor de lixo. As regras são verificadas em tempo de compilação.
As três regras
- Cada valor tem um único dono (owner).
- Só pode haver um dono por vez.
- Quando o dono sai de escopo, o valor é liberado.
Liberação automática
Quando a variável dona sai de escopo, a memória é liberada automaticamente.
fn main() {
{
let s = String::from("olá"); // 's' é dona
println!("{}", s);
} // aqui 's' sai de escopo e a memória é liberada
}
Move
Ao atribuir uma String a outra variável, a posse é movida. A antiga deixa de ser válida.
fn main() {
let s1 = String::from("texto");
let s2 = s1; // posse movida para s2
// println!("{}", s1); // ERRO: s1 não é mais válida
println!("{}", s2);
}
Tipos simples são copiados
Tipos escalares (como i32) implementam Copy, então são copiados, não movidos.
fn main() {
let a = 5;
let b = a; // cópia
println!("{} {}", a, b); // ambos válidos
}
Passar para função também move
fn consumir(s: String) {
println!("{}", s);
}
fn main() {
let texto = String::from("oi");
consumir(texto); // posse movida para a função
// texto não é mais válido aqui
}