Aperçu du cours
Objectif de formation : Comprendre le fonctionnement du langage Rust, ses avantages puis maîtriser son utilisation et ses concepts pratiques
Prérequis
- Connaissances de base d’un système Unix
- Connaissance en programmation bas niveau
Objectifs pédagogiques
- Découvrir, comprendre et utiliser le langage Rust et son écosystème dans vos futurs projets
- Utiliser la programmation concurrente et la bonne gestion d’erreur avec Rust
- Migrer efficacement vos applications C ou C ++ vers un environnement Rust
Public ciblé
- Développeurs
- Architectes
Programme de formation
-
Introduction
-
Présentation générale et objectifs de cette formation Rust
-
Principales caractéristiques du langage, avantages et positionnement
-
Fonctionnement de Rust (vitesse, erreurs, sûreté, multithreading) et paradigmes de programmation
-
Installer Rust et Cargo, le gestionnaire de packages pour gérer dépendances et compilation
-
Démarrer un nouveau projet : crates et structure de base
-
Outils de développement
-
Documentation
-
Cas pratiques : tour de table, échanges sur les différents contextes professionnels et les perspectives d’application des nouvelles compétences, installation de rustup et mise en place de différents outils de développement. Codage d’un premier programme en Rust via notre formation
-
-
Syntaxe et concepts basiques de programmation Rust
-
Présentation de la syntaxe de Rust
-
Variables, constantes et (im)mutabilité
-
Types primitifs
-
Expressions if, if else, boucles et boucles conditionnelles
-
Fonctions : déclaration, paramètres et retours
-
Définition d’un module
-
Tableaux et slices
-
Introduction aux macros
-
Commentaires
-
Cas pratiques : création de divers programmes en Rust (conversion de température, génération du nième nombre de la suite Fibonacci…) pour manipuler les concepts de base du langage.
-
-
Ownership & Borrowing
-
Utilisation des structs pour organiser la donnée : définition & instanciation
-
Méthodes & fonctions
-
Enumérations
-
Filtrage par motif (pattern matching) avec l’expression match
-
Déstructuration
-
Cas pratiques : écriture de programmes utilisant les structs et les enums, corrections de morceaux de code pour faire passer des tests (rustlings GitHub) et mise en œuvre de quelques patterns et anti-patterns de programmation Rust
-
-
Gestion des erreurs
-
Erreurs recoverable & unrecoverable
-
Rust & la gestion des erreurs
-
Macro panic!
-
Result, principes de fonctionnement
-
Propagation d’erreurs
-
Gestion des erreurs dans main()
-
Cas pratiques : utilisation de la macro panic, résolution de problèmes de programmation avec l’enum Option, la méthode unwrap et les combinateurs, l’enum Result et ses alias, gestion de multiples types d’erreur avec try.
-
-
Généricité en Rust, traits et lifetimes
-
Principes de fonctionnement des traits dans Rust
-
Création & implémentation d’un trait
-
Attribut derive
-
Surcharge d’opérateurs
-
Références et concept de durée de vie (lifetime)
-
Durées de vie statiques et associées
-
Généricité en Rust
-
Cas pratiques : implémentations de différents types de traits, surcharge de l’opérateur d’addition avec le trait Add, mise en œuvre de types et fonctionnalités génériques, utilisation de la clause where pour expliciter une restriction
-
-
Closures
-
Capturing variables
-
Closures
-
Performance
-
Sécurité
-
FnOnce & FnMut
-
Callbacks
-
-
Itérateurs
-
Iterator & IntoIterator traits
-
Consuming iterators
-
Implémentation de son propre itérateur
-
Cas pratiques : capture de variables par référence, par valeur, utilisation des closures avec des outils de la bibliothèque standard (itérateurs any, find), refactoring et mise en œuvre de la méthode next
-
-
Multi-threading
-
Création des threads
-
Transfert de données entre thread
-
Traits Sync et Send
-
Cas pratiques : création de threads avec spawn, communication entre threads et manipulation de concepts de programmation concurrente.
-
-
Pour aller plus loin avec Rust
-
Fonctionnement des macros
-
Contournement de la sûreté de Rust avec les blocs unsafe
-
Interfaçage avec C/C++
-