diff --git a/presentation/intro.md b/presentation/intro.md index 49509b7a9fa1370cedb53a6356d6a07a1d764f18..a5eaca97765a8118318d0a826854dabeb0c5705c 100644 --- a/presentation/intro.md +++ b/presentation/intro.md @@ -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? ](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.