diff --git a/presentation/codes/ownership/src/main.rs b/presentation/codes/ownership/src/main.rs index f249b163dd568ad43afd25cc12e47efd935b55cc..106a8017f168c495dcf9fa755e0067772b240e66 100644 --- a/presentation/codes/ownership/src/main.rs +++ b/presentation/codes/ownership/src/main.rs @@ -1,13 +1,13 @@ -fn do_something(library: Vec<&str>) { - // Do something with the library +fn do_something(_notebook: Vec<&str>) { + // Do something with the notebook } fn main() { let mut notebook = Vec::new(); // par défaut notebook est immutable - library.push("Il fait beau."); - library.push("Lea oiseaux chantent."); + notebook.push("Il fait beau."); + notebook.push("Lea oiseaux chantent."); - do_something(library); // ownership transféré à do_something - // do_something(library); // redo something + do_something(notebook); // ownership transféré à do_something + // do_something(notebook); // redo something } diff --git a/presentation/intro.md b/presentation/intro.md index 4ec285a24ec79cb0baca6f1271c28a349b43c206..b4d4a4b2ff3a0d1617ea04a8575247405bcf7ff1 100644 --- a/presentation/intro.md +++ b/presentation/intro.md @@ -3,16 +3,6 @@ title: Tech Lunch - Intro à Rust author: Orestis Malaspinas date: 11 janvier 2019 sansfont: Sans Serif -<!-- header-includes: - <link rel="stylesheet" href="../reveal.js/lib/css/zenburn.css" > - <link rel="stylesheet" href="../reveal.js/css/theme/simple.css" id="theme"> - <link rel="stylesheet" href="../css/console.css" id="theme"> - <script src="../jquery/dist/jquery.min.js"></script> --> -<!-- include-after: - <script src="../js/playRust.js"></script> - <script src="../js/remote-code.js"></script> - <script src="../js/remote-diagrams.js"></script> - <script src="../js/em-artiste.js"></script> --> pdfMaxPagesPerSlide: 1 <!-- slide-numbers: true --> @@ -137,24 +127,34 @@ Quel est le problème dans ce code? # Sûreté mémoire en Rust -## Ownership +## Ownership (1/N) -- On est **propriétaire** des données. -- On peut faire ce qu'on veut avec: +- Quand on est **propriétaire** des données, on peut faire ce qu'on veut avec: 1. Les lire. 2. Les modifier. 3. Les donner à quelqu'un d'autre. -. . . +## Ownership (2/N) -](https://upload.wikimedia.org/wikipedia/commons/d/d3/BibliothekSG.jpg) +](https://upload.wikimedia.org/wikipedia/commons/9/9f/Se%C5%A1ity.JPG){#fig:mem_vec_str width=50%} -. . . +## Ownership en pratique -Voyons ce que ça donne sur un exemple pratique. +<pre><code data-trim="hljs rust" class="lang-rust"> + fn do_something(library: Vec<&str>) { + // Do something with the library +} -## Ownership en pratique +fn main() { + let mut notebook = Vec::new(); // par défaut notebook est immutable + + library.push("Il fait beau."); + library.push("Les oiseaux chantent."); + do_something(library); // ownership transféré à do_something + // do_something(library); // redo something +} +</code></pre> <!-- - `vector` et `string` sont alignés en mémoire.