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…