diff --git a/presentation/intro.md b/presentation/intro.md index be2d85206c39568214014ea4cee2590c2ced6658..7c264cb76c500c4ce75229dfee223359655e9bb5 100644 --- a/presentation/intro.md +++ b/presentation/intro.md @@ -326,6 +326,41 @@ fn main() { La référence est **vérouillée** personne d'autre ne peut modifier ou lire les données. +## En pratique (2/2) + +<pre><code data-trim="hljs rust" class="lang-rust"> +fn main() { + let mut notebook = Vec::new(); // par défaut notebook est immutable + + notebook.push("Il fait beau."); + notebook.push("Les oiseaux chantent."); + + { + let mut_borrow = &mut notebook; + notebook.len(); // only mut_borrow can read or write. + + mut_borrow.push("Je le peux."); + } // mutable borrow ends here + + notebook.push("Je le peux aussi à présent."); + +} +</code></pre> + +# Les lois de Rust + +## Les trois loi de la propriété + +1. Chaque valeur a une variable qui est son propriétaire (`owner`). +2. Une valeur ne peut avoir qu'un seul propriétaire à chaque instant. +3. Quand le programme sort de la portée du propriétaire, la valeur est détruite (`dropped`). + +## Les deux lois de l'emprunt + +1. On peut avoir autant de références **immutables** qu'on le shoutaire sur des données. +2. On ne peut avoir **une seule** référence mutable sur des données. + + <!-- - `vector` et `string` sont alignés en mémoire. - références "light". - destruction déterministe. -->