Développement

Advanced Rust Avancé - 5 jours - 4800€ HT

Description

Le langage Rust est aujourd'hui incontournable, offrant aux développeurs la productivité d'un langage moderne de haut niveau combinée à des garanties strictes de robustesse et à un puissant système de types. Cette formation a pour but d'aborder les concepts avancés auxquels sont confrontés les développeurs Rust, afin d'acquérir la capacité de concevoir des logiciels complexes, fiables et hautement maintenables.

Les sujets traités, issus de retours d'expérience concrets, mettent un fort accent sur la pratique. Tout au long de la semaine, les participants développeront un outil complet d'analyse et d'extraction de données multi-thread. Ce projet sera itérativement amélioré pour intégrer des critères de recherche dynamiques, des performances concurrentes, une interface réseau client/serveur asynchrone, des tests de bout en bout et un pilotage via une interface web.

  • 5 jours (35 heures)

  • Projet de scanner de fichiers amélioré itérativement à chaque TP

  • Implémentation de concepts complexes : multi-threading, asynchronisme et sérialisation avancée

Objectifs

  • Maîtriser l'utilisation avancée du système de types, la gestion fine des erreurs et les paradigmes de programmation concurrentielle en Rust
  • Concevoir des architectures logicielles performantes en exploitant de manière optimale le multi-threading et le modèle asynchrone (async/await)
  • Réaliser un projet robuste de bout en bout, intégrant des tests avancés, des communications réseau client/serveur et une interface web

Public et prérequis

Cette formation s'adresse à des profils techniques souhaitant perfectionner leurs compétences de développement Rust.

  • Développeurs logiciels

  • Ingénieurs système et embarqué

  • Auditeurs de code et chercheurs en sécurité

Une connaissance préalable de Rust est indispensable : les participants doivent être capables de lire du code Rust et être familiers avec sa syntaxe ainsi qu'avec ses concepts fondamentaux (le pattern matching, le borrowing, etc.).

Une expérience de développement système ou embarqué, et/ou des langages C/C++ est un plus.

Contenu

Jour 1

Gestion des erreurs : approches pour gérer les opérations faillibles, via la bibliothèque standard Rust ou via des crates communes, avantages et limitations de chaque approche, éléments de choix et maintenabilité. Panic : spécificités, causes explicites ou implicites, approches idiomatiques pour structurer le code et réduire leurs occurrences. Utilisation optimale des types, API et idiomes : patterns communs (new type, builder), avantages et spécificités du typage Rust pour contraindre l'état ou l'interface d'un programme, API fonctionnelles (combinateurs) des itérateurs / Option / Result, maintenabilité, performance du code généré, antipatterns et erreurs fréquentes.

Jour 2

Performance & multi-thread : primitives et architectures de traitement multi-thread, API associées dans la bibliothèque standard et dans des crates communément utilisées, outils pour évaluer la performance d'un programme (benchmarking et profiling), et identifier des axes d'amélioration. Les concepts sont appliqués au projet via l'optimisation du scanner de fichiers, le passage de l'architecture en multi-thread et l'intégration de compteurs statistiques.

Jour 3

Serde : exemples concrets d'utilisation de Serde, configuration et modélisation pour en tirer le meilleur bénéfice. async / await : présentation du modèle async, ses avantages, inconvénients, spécificités, et pièges communs. Mise en pratique immédiate par l'implémentation d'un protocole commande/réponse réseau s'appuyant sur Serde et le développement d'interfaces client/serveur asynchrones.

Jour 4

Tests : tests automatiques, structuration dans un projet complexe, niveaux de tests possibles (unitaire, intégration, performance), conseils pour faciliter leur maintenance et efficacité, outillage avancé (mesure de la couverture, snapshot testing). Mise en œuvre approfondie de tests d'intégration complets validant de bout en bout les interactions entre le client et le serveur du scanner.

Jour 5

Développement Web : concepts et intégration du développement web en Rust, appliqués au pilotage des scans via la création d'une interface dédiée. Autres problématiques (selon temps et besoins des participants) : compilation conditionnelle et code build time (macros simples, macros procédurales, build.rs), gestion, maintenance et audit d'un arbre de dépendances, utilisation de FFI pour interagir avec du code C, utilisation avancée du linter Clippy, les parseurs par combinateurs et leurs avantages par rapport aux parseurs par grammaire (mis en pratique via le filtrage par type MIME).

Toutes les modalités de déroulement de la formation sont détaillées sur cette page.