Aller au contenu

Rust pour développeurs C#/Java — Mission

J’écris du C# (et je lis beaucoup de Java), et une part croissante de mon écosystème — IX, hari — est écrite en Rust. Je veux lire et modifier ce code avec assurance au lieu de deviner, et comprendre pourquoi le compilateur rejette ce qui serait parfaitement valable en C#.

Vous êtes à l’aise avec C# ou Java : classes, interfaces, génériques, exceptions, collections, LINQ ou Streams, async/await ou CompletableFuture. Vous n’avez jamais écrit de Rust. Chaque leçon part du concept que vous connaissez déjà et montre où Rust est d’accord, où il diffère, et pourquoi.

  • mettre en place un projet Rust avec Cargo et m’y retrouver dans l’outillage ;
  • expliquer la possession (ownership), l’emprunt et les durées de vie (lifetimes) en partant de ce qu’un ramasse-miettes fait normalement pour moi ;
  • modéliser des données avec struct, enum et match au lieu de hiérarchies de classes ;
  • gérer les erreurs avec Option, Result et ? au lieu de null et des exceptions ;
  • utiliser les traits, les génériques et les itérateurs comme j’utilise les interfaces, les génériques et LINQ/Streams ;
  • écrire du code concurrent et asynchrone sûr ;
  • tester, documenter et analyser (lint) une crate.
# Leçon Vous connaissez déjà
1 Chaîne d’outils et Cargo CLI dotnet, NuGet, Maven/Gradle
2 Types, mutabilité et expressions var, final/readonly, int/long, ternaires
3 Possession et déplacements le ramasse-miettes, IDisposable, try-with-resources
4 Emprunts et chaînes références, string/String, StringBuilder
5 Structs, enums et pattern matching classes, records, hiérarchies scellées, switch
6 Option, Result et ? null, exceptions
7 Traits et génériques interfaces, génériques
8 Collections et itérateurs LINQ, Streams
9 Durées de vie (lifetimes)
10 Modules, crates et workspaces namespaces/packages, projets, solutions
11 Box, Rc, Arc, RefCell références, objets partagés
12 Threads, Send/Sync, Mutex, rayon Thread, lock/synchronized, Parallel.For
13 async et tokio async/await, CompletableFuture
14 Tests, docs, clippy, fmt xUnit/JUnit, docs XML/Javadoc, analyseurs
15 Macros, unsafe et FFI (aperçu) générateurs de source, P/Invoke, JNI

Un cours de suite, Rust en pratique : IX et cie, applique chacune de ces idées à du vrai code dans IX, hari et mes autres dépôts Rust.

Journal — ce que j’ai essayé, ce qui m’a surpris, ce qu’il me reste à vérifier.