J'ai voulu relire mon cours Rust (il n'existait pas, alors le voilà)
Samedi soir, je cherche mon cours Rust. J'étais sûr de l'avoir écrit. J'ai celui de Python, celui de Go, celui d'assembleur ARM64, tous sur GitHub, tous dans le même moule. Rust, rien. Un dépôt vide créé en février, nommé rust-lab, zéro commit. Ma mémoire avait fait le travail à ma place.
Donc je l'ai écrit. Dix-sept chapitres, seize labos, cent quatre-vingt-cinq tests. Même format que le cours Go, parce que c'est lui que je relis le plus.
Pourquoi Rust, alors que je dis Go partout
Je l'écris dans le cours Go et je le répète ici : pour un outil que des sysadmins vont lire et patcher, c'est Go. pgCellar, mon outil de sauvegarde PostgreSQL, est en Go pour cette raison et pour aucune autre. Compiler du Rust refroidit beaucoup de monde, et un contributeur qui fuit coûte plus cher que dix pour cent de mémoire gagnée.
Mais regarde ce que tu as installé cette année. ripgrep. fd. bat. uv et ruff, qui ont balayé pip et flake8 en douze mois. Zed. Le moteur de Deno. Tous en Rust. Le noyau Linux accepte des pilotes en Rust, lui qui refusait tout sauf le C depuis 1991. Et le code qu'une IA te propose est de plus en plus souvent du Rust.
Je ne veux pas tout réécrire en Rust. Je veux le lire couramment. Savoir ce que fait un match, un Result, un emprunt, pour vérifier ce qu'on me donne au lieu de le coller les yeux fermés. C'est la raison numéro un du cours, et elle est écrite noir sur blanc au chapitre 0.
Le chapitre 0 tranche
Comme dans le cours Go, le premier chapitre ne contient pas une ligne de code. Il répond à la seule question qui compte : quand. Rust pour les outils où la vitesse se sent, pour accélérer un morceau de Python, pour le code exposé au réseau, pour l'embarqué et le WebAssembly. Go pour le service métier, l'agent, l'exporter, le CLI que ton équipe doit pouvoir corriger un lundi matin. Python pour le script et la data. Et une règle en sept questions pour les fois où tu hésites.
Go par défaut. Rust quand tu as une raison. Si tu n'as pas de raison, tu n'en as pas besoin.
Le chapitre 4, où tout le monde râle
Rust n'a pas de ramasse-miettes et pas de free. Chaque valeur a un propriétaire. Tu peux la prêter, en lecture à plusieurs ou en écriture à un seul, jamais les deux en même temps, et le compilateur vérifie tout ça avant de produire le binaire. C'est ce qui rend le langage sûr sans rien payer à l'exécution. C'est aussi ce qui te fait insulter ton écran la première semaine.
J'ai mis le double de place sur ce chapitre. Les vrais messages du compilateur, E0382, E0499, E0502, E0106, cités tels quels et expliqués un par un. Les cas où tu te bats contre le vérificateur et comment on s'en sort. Et un encadré "Venant de Go" à chaque notion : si tu as suivi le cours Go, tu as déjà la moitié du vocabulaire. Il te manque la partie où le compilateur refuse.
Les labos, comme d'habitude
Un squelette avec des TODO, des tests cargo qui te disent si c'est bon, une solution commentée ligne par ligne. Un convertisseur. Un inventaire pour apprendre les emprunts. Une crate semver avec ses tests de doc. Un pinger qui sonde des ports en parallèle avec des threads et des canaux. Un outil DevOps en ligne de commande. Une API REST avec axum. SQLite et PostgreSQL. Un binaire de cinq méga-octets dans une image Docker vide. Et pour finir, sondes : un service qui surveille des cibles TCP et expose ses métriques pour Prometheus. Le même projet final que le cours Go, en Rust, pour que tu puisses comparer les deux ligne à ligne.
Tout compile avec Rust 1.93. Chaque sortie montrée est la vraie. Un vérificateur relance les seize labos, rustfmt, clippy et tous les liens du cours. Il dit "Tout est bon" avant chaque commit, sinon ça ne part pas.
Ce que ça coûte, dit franchement
Trois à quatre semaines pour arrêter de se battre avec le vérificateur d'emprunts. Des temps de compilation qui font rire un développeur Go. Un async plus dur qu'ailleurs. Une bibliothèque standard volontairement petite, donc des crates à choisir. Rien de rédhibitoire. Rien de gratuit non plus. Le cours ne te vend pas Rust. Il te dit quand le prendre, et il te l'apprend si c'est le cas.
Quatre cours, une page
Python, Go, Rust, assembleur ARM64. Quatre dépôts publics, en français, gratuits, même format, même public : quelqu'un qui a déjà codé et qui fait tourner des machines. Ils sont maintenant regroupés sur une seule page, stranix.net/cours, avec les antisèches.
Si tu trouves une erreur, ouvre une issue. Si tu finis le projet final, dis-le moi. Je lis tout.
Un langage de plus dans la boîte. Pas pour remplacer les autres. Pour savoir lequel sortir.
- Le cours : https://github.com/stranix79/cours-rust
- Les quatre cours : https://stranix.net/cours/
- Le cours Go, son jumeau : https://github.com/stranix79/cours-go