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

added beginning of borrowing

parent 48229462
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -87,7 +87,7 @@ pdfMaxPagesPerSlide:
:::
::::::::::::::
## Et la sécurité dans tout ça?
## Et la sûreté dans tout ça?
:::::::::::::: {.columns}
::: {.column width="50%"}
......@@ -127,7 +127,7 @@ Quel est le problème dans ce code?
# Sûreté mémoire en Rust
## Ownership (1/1)
## Ownership (1/2)
- Quand on est **propriétaire** des données, on peut faire ce qu'on veut avec:
1. Les lire.
......@@ -138,7 +138,7 @@ Quel est le problème dans ce code?
![Comme avec un cahier. Source [Wikipedia](https://upload.wikimedia.org/wikipedia/commons/9/9f/Se%C5%A1ity.JPG)](https://upload.wikimedia.org/wikipedia/commons/9/9f/Se%C5%A1ity.JPG){#fig:mem_vec_str width=50%}
## Ownership en pratique
## Ownership en pratique (1/3)
<pre><code data-trim="hljs rust" class="lang-rust">
fn do_something(_notebook: Vec<&str>) { // _notebook prend l'ownership
......@@ -161,7 +161,7 @@ fn main() {
Le transfert de l'ownership est complètement décidé à la **compilation**.
## Ownership en pratique
## Ownership en pratique (2/3)
Ce qui se passe en mémoire:
......@@ -173,7 +173,7 @@ Ce qui se passe en mémoire:
**`notebook` est détruit à la fin de `do_something` et ne peut plus être réutilisé**
## Ownership en pratique
## Ownership en pratique (3/3)
En C++ une sytaxe similaire a un effet complètement différent
......@@ -195,6 +195,37 @@ void main() {
}
```
## Borrowing
Mais comment lire (ou modifier) le notebook et le réutiliser ensuite?
<pre><code data-trim="hljs rust" class="lang-rust">
fn do_something(_notebook: Vec<&str>) -> Vec<&str> { // _notebook prend l'ownership
// Do something with the library
notebook
} // _notebook est détruit et ses données aussi
fn main() {
let mut notebook = Vec::new(); // par défaut notebook est immutable
notebook.push("Il fait beau.");
notebook.push("Les oiseaux chantent.");
notebook = do_something(notebook); // ownership transféré à do_something et on le retourne
notebook = do_something(notebook); // on peut le réutiliser
}
</code></pre>
. . .
"Un peu" verbeux de faire comme cela.
## Borrowing
Solution: le propriétaire **prête** les données dont il est propriétaire.
<!-- - `vector` et `string` sont alignés en mémoire.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment