Introduction à Rust
Qu’est-ce que Rust ?
Section intitulée « Qu’est-ce que Rust ? »Rust est un langage de programmation système : le genre de langage qu’on utilise pour les mêmes tâches que C ou C++, comme les systèmes d’exploitation, les moteurs de jeu, les navigateurs, les bases de données et les outils en ligne de commande, là où la vitesse et le contrôle comptent.
Ce qui le rend spécial, c’est qu’il offre ces performances de bas niveau sans les pièges classiques. En C, il est facile de lire par accident de la mémoire déjà libérée ou de provoquer une data race (accès concurrent non synchronisé). En Rust, ce genre de code ne compile généralement même pas : le compilateur vous arrête dès la compilation.
Rust a commencé comme un projet personnel de Graydon Hoare, qui l’a ensuite proposé à Mozilla pour obtenir son soutien. La version stable 1.0 est sortie en 2015. Aujourd’hui, Rust est maintenu par la Rust Foundation et par une grande communauté open source.
Le problème que Rust résout
Section intitulée « Le problème que Rust résout »Historiquement, il fallait choisir entre deux compromis :
- Langages de bas niveau (C, C++) : rapides et proches de la machine, mais c’est vous qui gérez la mémoire à la main. Les erreurs mènent à des plantages et à des failles de sécurité.
- Langages de haut niveau (Python, Java, Go) : sûrs et faciles, mais ils s’appuient sur un ramasse-miettes (garbage collector), ce qui coûte en performances et en prévisibilité.
La grande idée de Rust, c’est une troisième voie : il garantit la sécurité de la mémoire à la compilation grâce à un système appelé ownership (possession), que vous découvrirez plus loin dans ce cours. Pas de ramasse-miettes, pas de free() manuel : le compilateur détermine lui-même quand la mémoire n’est plus nécessaire.
Rust face aux autres langages
Section intitulée « Rust face aux autres langages »Voici une carte approximative de la place de Rust par rapport à des langages que vous connaissez peut-être :
| Langage | Vitesse | Sécurité mémoire | Ramasse-miettes |
|---|---|---|---|
| C / C++ | Rapide | Manuelle, source d’erreurs | Non |
| Go | Bonne | Sûre | Oui |
| Python | Plus lent | Sûre | Oui |
| Rust | Rapide | Sûre (vérifiée à la compilation) | Non |
À retenir : Rust vise la vitesse de C et la sécurité des langages de haut niveau, en même temps. Pour une comparaison plus détaillée avec du vrai code, consultez Rust vs C++, Go et Python.
Où Rust est-il utilisé ?
Section intitulée « Où Rust est-il utilisé ? »Vous utilisez sans doute déjà du Rust sans le savoir :
- Firefox : une partie de son moteur de rendu est écrite en Rust
- Cloudflare et Discord : des services backend où la performance est critique
- Le noyau Linux : il accepte désormais des pilotes écrits en Rust
- Les outils en ligne de commande : des outils rapides et populaires comme ripgrep,
batetfd - WebAssembly : Rust est l’un des meilleurs choix pour exécuter du code à vitesse native dans le navigateur
Un petit avant-goût
Section intitulée « Un petit avant-goût »Pas besoin de comprendre chaque détail pour l’instant. Remarquez simplement à quel point c’est lisible :
fn main() { let name = "Rustacé"; println!("Bonjour, {name} !");}Sortie :
Bonjour, Rustacé !À quoi ressemble la « sécurité » en pratique
Section intitulée « À quoi ressemble la « sécurité » en pratique »« Sécurité mémoire », ça semble abstrait, alors voici un cas concret. Imaginons que vous ayez une liste de trois scores et que vous demandiez le dixième, qui n’existe pas.
En C, c’est permis. Le programme lit en silence ce qui se trouve en mémoire juste après votre liste. Vous pouvez obtenir un nombre au hasard, un plantage ou une faille de sécurité, et rien ne vous prévient.
Rust ne laisse pas passer ça. Si le compilateur voit l’erreur, il refuse de compiler le programme :
fn main() { let scores = [90, 85, 77]; println!("{}", scores[9]);}error: this operation will panic at runtime --> src/main.rs:3:20 |3 | println!("{}", scores[9]); | ^^^^^^^^^ index out of bounds: the length is 3 but the index is 9Le message du compilateur (en anglais, comme toujours avec rustc) dit que cette opération provoquera un panic (arrêt du programme) à l’exécution : l’indice 9 dépasse la longueur du tableau, qui est 3.
Et quand vous n’êtes pas sûr qu’un élément existe, Rust vous donne une façon polie de le demander. .get() répond « le voici » ou « il n’y a rien » (None), au lieu de vous renvoyer n’importe quoi :
fn main() { let scores = [90, 85, 77]; println!("premier score : {}", scores[0]); println!("dixième score : {:?}", scores.get(9));}Sortie :
premier score : 90dixième score : NoneNe vous souciez pas encore de [...], .get() ou None. Vous les apprendrez correctement dans Les tableaux et Option. Ce qu’il faut retenir pour l’instant : toute une famille de bugs du type « lire de la mémoire qu’on ne devrait pas lire » est soit détectée avant l’exécution, soit gérée de façon sûre pendant l’exécution.
Rust est-il difficile à apprendre ?
Section intitulée « Rust est-il difficile à apprendre ? »Réponse honnête : la première ou les deux premières semaines peuvent être frustrantes. Des notions comme l’ownership et le borrowing (emprunt) sont vraiment nouvelles, et le compilateur refusera du code dont vous pensez qu’il devrait fonctionner. Mais cette friction, c’est le compilateur qui vous apprend à écrire du code plus sûr, et le déclic arrive plus vite que la plupart des gens ne l’imaginent.
Ce cours est conçu pour adoucir cette courbe d’apprentissage : de petites étapes, des exemples réels et un bouton Essayez par vous-même partout.
Exercices
Section intitulée « Exercices »1. Saluez-vous
Section intitulée « 1. Saluez-vous »Modifiez le programme de l’« avant-goût » pour qu’il vous salue par votre prénom, et ajoutez une deuxième ligne qui affiche Bienvenue dans Rust !. Indice : chaque println! affiche une ligne, il vous en faut donc deux.
Voir la solution
fn main() { let name = "Camille"; println!("Bonjour, {name} !"); println!("Bienvenue dans Rust !");}Sortie :
Bonjour, Camille !Bienvenue dans Rust !2. Une info sur Rust
Section intitulée « 2. Une info sur Rust »Stockez le mot Rust et l’année 2015 dans deux noms, puis affichez la phrase Rust 1.0 est sorti en 2015. en utilisant les deux. Indice : vous pouvez mettre plusieurs {nom} dans le même println!.
Voir la solution
fn main() { let language = "Rust"; let year = 2015; println!("{language} 1.0 est sorti en {year}.");}Sortie :
Rust 1.0 est sorti en 2015.Récapitulatif
Section intitulée « Récapitulatif »- Rust est un langage système rapide et sûr : la vitesse de C, sans ramasse-miettes.
- Il empêche les bugs mémoire à la compilation grâce à l’ownership.
- On l’utilise dans les navigateurs, les noyaux, les services cloud, les outils en ligne de commande et WebAssembly.
- La courbe d’apprentissage est réelle mais courte : le compilateur est de votre côté.
Prochaine étape : installer Rust et lancer votre premier programme sur votre machine.
Petit quiz
Section intitulée « Petit quiz »Petit quiz
1. Comment Rust assure-t-il la sécurité de la mémoire sans ramasse-miettes ?
2. D’après le tableau comparatif, qu’ont en commun Rust et Go ?
3. Comment les développeurs Rust se surnomment-ils ?
Score : 0 / 3
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Introduction — The Rust Book (en anglais) : à qui s’adresse le livre officiel et comment il est organisé. C’est le meilleur compagnon gratuit de ce cours.
- rust-lang.org : la page d’accueil officielle, avec les arguments « Pourquoi Rust ? » (performance, fiabilité, productivité) et des témoignages d’entreprises qui l’utilisent.
- Apprendre Rust : la liste officielle des ressources d’apprentissage, dont Rust by Example et les exercices Rustlings.
- Announcing Rust 1.0 — Rust Blog (en anglais) : l’article de 2015 qui a déclaré Rust stable, et ce que cette « stabilité » promet pour votre code.
- Rust Foundation (en anglais) : l’organisation à but non lucratif qui soutient le projet Rust et ses mainteneurs.