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

added last slide

parent cb553c55
No related branches found
No related tags found
No related merge requests found
Pipeline #38991 passed
......@@ -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.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment