From e613ed1a1bd8c0ba156b8a01891c3ed5f88e63ad Mon Sep 17 00:00:00 2001
From: Orestis Malaspinas <orestis.malaspinas@hesge.ch>
Date: Wed, 16 Jan 2019 16:57:11 +0100
Subject: [PATCH] added slides

---
 presentation/codes/borrowing/src/main.rs |  4 +++
 presentation/intro.md                    | 39 ++++++++++++++++++++++--
 2 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/presentation/codes/borrowing/src/main.rs b/presentation/codes/borrowing/src/main.rs
index de78a22..71a483e 100644
--- a/presentation/codes/borrowing/src/main.rs
+++ b/presentation/codes/borrowing/src/main.rs
@@ -14,6 +14,10 @@ fn main() {
         let n = &notebook;
         borrow(n);
         borrow(&notebook);
+
+        // 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(&notebook); // on peut réutiliser notebook
 }
diff --git a/presentation/intro.md b/presentation/intro.md
index d4b10c6..b45ed01 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:
 
 ![](figs/mem_vec_borrowing.svg){#fig:mem_vec_borrowing width=45%}![](figs/mem_vec_borrowing_end.svg){#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. -->
-- 
GitLab