diff --git a/presentation/codes/borrowing/src/main.rs b/presentation/codes/borrowing/src/main.rs index de78a228629b9c671e5ed543bfd3eee611e76691..71a483e428489f85e925d315acb37bc936d725ad 100644 --- a/presentation/codes/borrowing/src/main.rs +++ b/presentation/codes/borrowing/src/main.rs @@ -14,6 +14,10 @@ fn main() { let n = ¬ebook; borrow(n); borrow(¬ebook); + + // n.push("Je préférerais regarder la télé.") // attention on a emprunté notebook + // On ne peut pas le modifier + // notebook.push("Ou sortir dans le jardin.") } // la référence n est détruite borrow(¬ebook); // on peut réutiliser notebook } diff --git a/presentation/intro.md b/presentation/intro.md index d4b10c6a129c975bf6e345e73691a70b762d353f..b45ed01f54bd4355b7e3331202dd8046b949c0e7 100644 --- a/presentation/intro.md +++ b/presentation/intro.md @@ -222,7 +222,7 @@ fn main() { ## Borrowing -### Solution: le propriétaire **prête** ses données. +Solution: le propriétaire **prête** ses données. 1. On crée une référence vers les données (par défaut immutable). 2. On peut donner la référence. @@ -241,7 +241,6 @@ fn main() { borrow(& notebook); // on crée une référence et on la passe à borrow borrow(& notebook); // on peut réutiliser notebook - } </code></pre> @@ -251,6 +250,42 @@ Ce qui se passe en mémoire: {#fig:mem_vec_borrowing width=45%}{#fig:mem_vec_borrowing_end width=45%} +### Attention: un emprunt est **immutable** par définition! + +## Borrowing en pratique (3/3) + +### Que se passe-t-il + +:::::::::::::: {.columns} +::: {.column width="50%"} +``` +{ + vector<string> v; // alloué sur la pile + // et l'espace est + // contigu en mémoire + ... + auto& elem = v[0]; // référence + v.push_back(a_string); + cout << elem; + ... +} // destruction automatique +``` +::: +::: {.column width="50%"} +<pre><code data-trim="hljs rust" class="lang-rust"> +fn main() { + let mut v = Vec::new(); // par défaut notebook est immutable + v.push("Test."); + + let elem = &v[0]; // référence + v.push("Test again."); +} +</code></pre> +::: +:::::::::::::: + + + <!-- - `vector` et `string` sont alignés en mémoire. - références "light". - destruction déterministe. -->