From 1825f7058ca337e3ae3f7fd7bb98e771838a8a42 Mon Sep 17 00:00:00 2001
From: Orestis <orestis.malaspinas@pm.me>
Date: Mon, 31 Mar 2025 17:28:13 +0200
Subject: [PATCH] added last slide

---
 09_pinning.md | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/09_pinning.md b/09_pinning.md
index fad4a2f..dfccf38 100644
--- a/09_pinning.md
+++ b/09_pinning.md
@@ -466,3 +466,23 @@ fn main() {
 * La macro `pin!()` nous sauve
 * Si on essaie de refaire l'exemple précent, on a une erreur de compilation
 * Si on veut absolument faire un `Pin` sur la pile, utiliser `pin!()`
+
+## La `Coroutine` et le pinning
+
+* Une souffrance infinie, mais en gros:
+    1. Modofier `poll()` en `poll(self: Pin<&mut self>)`
+    2. Ajouter `Pin<>` autour de Task
+    3. Ajouter un champs `_pin: PhantomPinned` à `Coroutine`
+* Régler les problèmes du compilateur:
+    1. Des `as_mut()` sur les `match` des future
+    2. Ajouter un `this = unsafe { self.get_uncheked_mut() }` dans le `poll()` de `HttpGetFuture`
+* Voilà
+
+
+## En résumé
+
+* On a environ tout pour les `Future` en Rust
+* On a ajouté un moyen d'avoir un état interne à notre implémentation `async/await`
+* On a ajouté un moyen d'enregistrer/charger des structures qui contiennent des références
+* On a vu le concept de `Pin` qui est fondamental pour garantir le modèle mémoire de Rust
+* Bref: actuellement on a un runtime primitif qui peut "tout" faire.
-- 
GitLab