Empréstimos Compartilhados e Únicos

O Rust coloca restrições nas formas como você pode emprestar valores:

  • Você pode ter um ou mais valores &T a qualquer momento, ou
  • Você pode ter exatamente um valor &mut T.
fn main() {
    let mut a: i32 = 10;
    let b: &i32 = &a;

    {
        let c: &mut i32 = &mut a;
        *c = 20;
    }

    println!("a: {a}");
    println!("b: {b}");
}
  • O código acima não compila porque a é emprestado como mutável (através de c) e como imutável (através de b) ao mesmo tempo.
  • Mova a instrução println! para b antes do escopo que introduz c para fazer o código compilar.
  • Após essa alteração, o compilador percebe que b só é usado antes do novo empréstimo mutável de a através de c. Este é um recurso do verificador de empréstimo (borrow checker) chamado “tempos de vida não lexicais”.