Description
Cette formation Rust avancé vous permettra d'aller bien au-delà des fondamentaux et de maîtriser les mécanismes profonds du langage : traits et génériques avancés, lifetimes complexes, mutabilité intérieure, concurrence, asynchronisme, macros et FFI.
Pendant 3 jours, vous apprendrez à :
- exploiter les mécanismes avancés de Rust (traits, lifetimes, génériques) pour écrire du code robuste et maintenable,
- concevoir des systèmes concurrents et asynchrones performants en maîtrisant la mémoire partagée,
- étendre et intégrer Rust grâce aux macros, à
unsafe et à la FFI.
À l'issue de la formation, vous serez capable d'écrire du code Rust idiomatique, performant et sûr, et de tirer parti des fonctionnalités les plus puissantes du langage dans vos projets.
Public
Cette formation s'adresse aux développeur·euse·s Rust ayant déjà une première expérience du langage et souhaitant en maîtriser les mécanismes avancés pour écrire du code idiomatique, performant et sûr.
Les objectifs
- Maîtriser les traits avancés et la généricité en profondeur
- Comprendre et manipuler les lifetimes complexes
- Utiliser la mutabilité intérieure et les smart pointers à bon escient
- Écrire du code concurrent et asynchrone performant et sûr
- Créer ses propres macros déclaratives et procédurales
- Interfacer du code Rust avec C/C++ via la FFI et unsafe
Pré-requis
- Avoir suivi la formation Rust ou disposer d'une expérience équivalente
- Maîtriser les concepts de base d'ownership, de borrowing et de lifetimes
- Être à l'aise avec les traits, les génériques et les collections standard (
Vec, HashMap, itérateurs)
- Avoir déjà développé au moins un petit projet en Rust
- Ordinateur portable à apporter
Le programme de la formation Rust Avancé
Jour 1 — Traits, génériques et types avancés
-
Aller plus loin avec les traits
- La règle de cohérence (orphan rule)
- Traits fondamentaux de la bibliothèque standard (
From, Into, AsRef, Borrow, Deref, Drop)
- Surcharge d'opérateurs (
Add, Mul, …)
- Bornes de traits avancées et clauses
where
-
Génériques avancés
- Monomorphisation et impact sur les performances
-
Higher-Ranked Trait Bounds (HRTB)
- Le Turbofish
- Patterns de conception avec traits et génériques
-
Dispatch dynamique
- Les objets de trait (
dyn Trait)
- Construire des collections hétérogènes
- Bornes de lifetime pour les objets de trait
- Dispatch statique vs. dynamique : quel choix faire ?
-
Taille des types et boxing
- Types de taille fixe et de taille dynamique (
Sized, ?Sized)
- Les types de données algébriques
-
Box<T> et reference counting (Rc, Arc)
Mises en pratique :
- Implémenter une bibliothèque générique avec des bornes de traits complexes
- Construire une collection hétérogène à l'aide d'objets de trait
Jour 2 — Ownership avancé, concurrence et performance
-
Ownership et lifetimes avancés
- Plongée dans les règles d'emprunt
- Sous-typage des lifetimes
- Stocker des références dans des structures
- Implémenter des traits pour des références
- Lifetimes dans les closures et les callbacks
-
Mutabilité intérieure
-
Cell et RefCell en détail
- Combiner mutabilité intérieure et
Rc/Arc
- Pousser
RefCell à ses limites avec rayon
-
État global
-
const vs. static
-
OnceCell, LazyLock et la gestion moderne du lazy init
-
Concurrence sans peur
- Approfondissement de
Send et Sync
- Passage de messages et canaux
- Parallélisme de données avec
rayon
- Crates de concurrence populaires (
crossbeam, parking_lot, …)
-
Asynchronisme avancé
- Le modèle d'exécution asynchrone en profondeur
- Patterns asynchrones (
select!, join!, streams)
- Comparaison des runtimes (
tokio, async-std, smol)
- Gestion des erreurs en contexte asynchrone
-
Mémoire et performance
- Choix d'un allocateur et optimisations courantes
- Profilage et benchmarking (
criterion, flamegraph)
Mises en pratique :
- Écrire un programme concurrent utilisant
rayon et Arc
- Implémenter un service asynchrone avec
tokio et en gérer les erreurs
- Profiler une application Rust et identifier ses goulots d'étranglement
Jour 3 — Macros, unsafe et FFI
-
Macros déclaratives
- Définir des macros avec
macro_rules!
- Règles d'hygiène
- Visibilité et export des macros
-
Macros procédurales
- Macros
derive, macros d'attribut, macros de type fonction
- Introduction à
syn et quote
-
Rust unsafe
- Les pouvoirs d'
unsafe et leurs limites
- Pointeurs bruts (
*const T, *mut T)
- Traits et fonctions
unsafe
- Encapsuler de l'
unsafe derrière une API sûre
-
FFI (Foreign Function Interface)
- Les bases :
extern, #[repr(C)], conventions d'appel
- Appeler du C depuis Rust
- Appeler Rust depuis du C
- Sécurité et bonnes pratiques de la FFI
Bonus/Options
En fonction du temps disponible et du niveau des apprenants, les modules suivants peuvent être aussi étudiés :
- Introduction à WebAssembly avec Rust
- Programmation no_std et premiers pas sur l'embarqué
- Concevoir une crate publiable sur crates.io (documentation, features, versioning)
Mises en pratique :
- Écrire une macro déclarative pour réduire la duplication de code
- Créer une bibliothèque dynamique Rust appelable depuis du C
- Encapsuler une API C
unsafe dans une interface Rust sûre
Télécharger le programme
FAQ
Nos formations sont éligibles à plusieurs dispositifs de financement, selon votre situation. Human Coders est certifié
Qualiopi, ce qui permet la prise en charge par des organismes comme
Pôle emploi, votre OPCO ou encore le
CPF (Compte Personnel de Formation) pour certaines formations.
Pour en savoir plus, veuillez consulter notre page : Comment financer votre formation ?
Oui, la formation peut être proposée en présentiel ou en distanciel. Pour les inter-entreprises, les modalités (présentiel ou à distance) sont fonction de la session.
Nous pouvons organiser des sessions à d'autres dates ou dans d'autres villes (Bordeaux, Lille, Lyon, Marseille, Montpellier, Nantes, Nice, Paris, Strasbourg, Toulouse...)
Les formations se déroulent toujours en petit groupe de 3 à 6 stagiaires. Nous souhaitons que les formateurs et formatrices puissent passer un maximum de temps avec chacun·e.
Voici une journée type :
- 9h : vous êtes accueillis par votre formateur·rice autour d'un petit déjeuner (croissants, pains au chocolat, jus de fruit, thé ou café...)
- 9h30 : la formation commence
- 12h30 : pause de midi. Le·a formateur·rice mangera avec vous. C'est l'occasion d'avoir des discussions plus informelles.
- 14h : reprise de la formation
- 18h : fin de la journée
8 raisons de participer à une formation Human Coders
- Satisfaction client élevée : Un taux de statisfaction de 4,6/5 depuis 2012 (sur 1871 sessions réalisées). 99% des participants se disent satisfaits de nos formations
- Approche pédagogique unique : Des formations en petit groupe, des formateurs passionnés et expérimentés, de véritables workshops... (Plus d'infos sur notre manifeste)
- Catalogue de formations complet : 253 formations au catalogue, de quoi vous accompagner sur tout vos projets
- Écosystème dynamique : Nous accompagnons les dev depuis 14 ans avec des initiatives comme Human Coders News, les Human Talks, le podcast ou encore notre serveur Discord
- Financement facilité : Organisme certifié Qualiopi, indispensable pour que vous puissiez obtenir des aides au financement via votre OPCO
- Références clients prestigieuses : De nombreux clients qui nous font confiance depuis des années
- Accompagnement sur mesure : Nous vous proposons un accompagnement personnalisé par nos consultants pour vous aider dans vos projets au-delà de la formation
- Valorisation professionnelle : Remise d'un diplôme, d'une attestation et d'une certification, suivant les formations effectuées, que vous pourrez afficher sur vos CV et réseaux sociaux