Emprunt

Les copies peuvent être coûteuses si le compilateur ne parvient pas à les éliminer.

Dans le code “chaud”, on privilégiera donc les accès en place via l’emprunt (cf références C++) :

#![allow(unused)]
fn main() {
// Accès en lecture seule
let mut numbers = vec![1.2, 3.4, 5.6];
for x in &numbers {
    println!("{x}");
}

// Accès en écriture
for x in &mut numbers {
    *x = 4.2;
}
println!("{numbers:?}");
}

Prix à payer pour les garanties de sûreté de Rust : des restrictions sur les emprunts.

  • Régime type R/W lock : 1 emprunt en écriture ou N emprunts partagés
    • Sauf exceptions, pas d’accès en écriture via un emprunt partagé
  • Un emprunt ne peut pas sortir de la portée de la variable parente
  • Toute modification de la variable parente invalide les emprunts

Sur ce, nous pouvons fermer cette parenthèse et revenir à nos itérateurs…