Skip to content
Snippets Groups Projects
Commit e613ed1a authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added slides

parent 378a82c5
Branches
No related tags found
No related merge requests found
Pipeline #
...@@ -14,6 +14,10 @@ fn main() { ...@@ -14,6 +14,10 @@ fn main() {
let n = &notebook; let n = &notebook;
borrow(n); borrow(n);
borrow(&notebook); 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 } // la référence n est détruite
borrow(&notebook); // on peut réutiliser notebook borrow(&notebook); // on peut réutiliser notebook
} }
...@@ -222,7 +222,7 @@ fn main() { ...@@ -222,7 +222,7 @@ fn main() {
## Borrowing ## 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). 1. On crée une référence vers les données (par défaut immutable).
2. On peut donner la référence. 2. On peut donner la référence.
...@@ -241,7 +241,6 @@ fn main() { ...@@ -241,7 +241,6 @@ fn main() {
borrow(& notebook); // on crée une référence et on la passe à borrow borrow(& notebook); // on crée une référence et on la passe à borrow
borrow(& notebook); // on peut réutiliser notebook borrow(& notebook); // on peut réutiliser notebook
} }
</code></pre> </code></pre>
...@@ -251,6 +250,42 @@ Ce qui se passe en mémoire: ...@@ -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%} ![](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. <!-- - `vector` et `string` sont alignés en mémoire.
- références "light". - références "light".
- destruction déterministe. --> - destruction déterministe. -->
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment