Aperçu du cours
Objectif de formation : Comprendre le fonctionnement du langage Rust, ses avantages puis maîtriser son utilisation et ses concepts pratiques
Programme d'études
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
Adapters
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++