Chapitre 116 minIntermédiaire
C'est quoi Rust ? Pourquoi l'apprendre et comment l'installer
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- dire ce qu'est Rust et ce qui le distingue de C#, de JavaScript et du C ;
- expliquer pourquoi l'ANSSI, la NSA et la CISA recommandent les langages sûrs en mémoire ;
- installer Rust avec rustup et créer un projet avec cargo ;
- lire un message d'erreur du compilateur et appliquer sa suggestion.
3 exercices corrigés1 schéma
Rust est un langage de programmation compilé, à typage statique, conçu pour écrire des programmes rapides et sûrs en mémoire. Sa particularité : il libère la mémoire sans ramasse-miettes (garbage collector), grâce à des règles de propriété que le compilateur vérifie avant même que le programme ne tourne. Ce chapitre explique d'où vient Rust, pourquoi les agences de cybersécurité le recommandent, puis t'aide à l'installer et à lancer ton premier programme.
Rust en quelques dates
| Date | Événement |
|---|---|
| 2006 | Graydon Hoare commence Rust comme projet personnel |
| 2009 | Mozilla, l'éditeur de Firefox, soutient officiellement le projet |
| Mai 2015 | Rust 1.0 : le langage est déclaré stable |
| Février 2021 | Création de la Rust Foundation, qui porte désormais le projet |
| Décembre 2022 | Le noyau Linux 6.1 accepte du code Rust |
| Février 2025 | Rust 1.85 stabilise l'édition 2024 |
| Décembre 2025 | Les mainteneurs du noyau Linux déclarent que Rust n'y est plus expérimental |
Rust publie une nouvelle version stable toutes les six semaines : 1.97 en juillet 2026, 1.98 en août, 1.99 en octobre, puis 1.100 mi-novembre : les numéros continuent simplement après 99. Ces versions ne cassent pas le code existant. Les changements plus profonds passent par les éditions (2015, 2018, 2021, 2024) : chaque projet déclare la sienne dans son fichier Cargo.toml, et un projet en édition 2021 compile toujours avec le dernier compilateur.
Pourquoi la sûreté mémoire compte
Un programme range ses données en mémoire, puis libère cette mémoire quand il n'en a plus besoin. En C et en C++, c'est au développeur de le faire à la main, et les erreurs sont faciles. Elles portent des noms que tu croiseras en cybersécurité :
| Faille | Principe | Conséquence possible |
|---|---|---|
| Dépassement de tampon (buffer overflow) | Le programme écrit au-delà de la zone réservée | Écrasement d'autres données, prise de contrôle du programme |
| Utilisation après libération (use after free) | Le programme se sert d'une zone déjà rendue au système | Lecture de données d'un autre traitement, exécution de code |
| Double libération (double free) | La même zone est libérée deux fois | Corruption de la mémoire, plantage |
| Accès concurrent (data race) | Deux fils d'exécution modifient la même donnée en même temps | Résultats incohérents, failles difficiles à reproduire |
Ces erreurs ne sont pas rares : en 2019, Microsoft indiquait qu'environ 70 % des vulnérabilités auxquelles il attribue chaque année un identifiant CVE sont des problèmes de sûreté mémoire, et l'équipe de Chromium (le moteur de Chrome) publiait un chiffre comparable pour ses failles graves.
Il existe deux grandes familles de solutions. La première est le ramasse-miettes de C#, Java, JavaScript ou Python : un programme qui tourne en même temps que le tien et libère ce qui n'est plus utilisé. C'est sûr, mais il consomme de la mémoire et du temps processeur, et ne convient pas à un noyau de système ou à un pilote. La seconde est celle de Rust : des règles de propriété (ownership) que le compilateur vérifie. Un programme qui pourrait utiliser une zone libérée ne compile tout simplement pas. Le chapitre 3 détaille ces règles.
Qui recommande et qui utilise Rust
Les agences de cybersécurité. L'ANSSI publie un guide, Règles de programmation pour le développement d'applications sécurisées en Rust (version 1.0 en 2020, tenue à jour en ligne sous le titre Développement sécurisé en Rust), qui présente Rust comme un langage « orienté vers la sûreté mémoire ». En décembre 2023, la CISA américaine et ses partenaires ont publié The Case for Memory Safe Roadmaps, qui demande aux éditeurs de prévoir le passage à des langages sûrs en mémoire. En juin 2025, la NSA et la CISA ont enfoncé le clou avec Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development. Rust y figure aux côtés de C#, Java, Go, Python ou Swift : la recommandation porte sur la sûreté mémoire, pas sur un langage unique.
Les systèmes d'exploitation. Le noyau Linux accepte du code Rust depuis la version 6.1 (décembre 2022), surtout pour des pilotes ; en décembre 2025, ses mainteneurs ont décidé que Rust n'y était plus une expérience. Google écrit une part croissante d'Android en Rust et annonçait en novembre 2025 que les failles de sûreté mémoire étaient passées, pour la première fois, sous 20 % du total des failles d'Android. Microsoft livre dans Windows 11 des composants du noyau réécrits en Rust, comme une partie du pilote graphique win32kbase_rs.sys.
Les outils que tu utilises peut-être déjà. Des moteurs de Firefox, le proxy Pingora de Cloudflare, les outils Python uv et ruff, l'outil de recherche ripgrep (que VS Code utilise pour sa recherche dans les fichiers) sont écrits en Rust.
Rust face aux langages que tu connais
| JavaScript, Python | C#, Java | C, C++ | Rust | |
|---|---|---|---|---|
| Exécution | Interprété ou compilé à la volée | Compilé vers une machine virtuelle (.NET, JVM) | Compilé en code machine | Compilé en code machine |
| Typage | Dynamique | Statique | Statique | Statique, avec inférence |
| Libération de la mémoire | Ramasse-miettes | Ramasse-miettes | À la main | Automatique, vérifiée à la compilation |
| Valeur absente | null, undefined, None | null | Pointeur nul | Pas de null : le type Option |
| Erreurs | Exceptions | Exceptions | Codes de retour | Le type Result |
| Programmation objet | Classes | Classes, héritage | Classes en C++ | Structs et traits, sans héritage |
Rust emprunte aux langages fonctionnels (match, itérateurs, types Option et Result) et aux langages système (contrôle de la mémoire, pas de machine virtuelle). C'est ce mélange qui le rend un peu déroutant au début, et très agréable ensuite.
Installer Rust avec rustup
On installe Rust avec rustup, l'installeur officiel. Il installe le compilateur, l'outil cargo et la bibliothèque standard, puis il les met à jour.
Sous Linux et macOS, tape dans un terminal la commande donnée sur rustup.rs :
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Accepte l'installation par défaut (choix 1), puis ouvre un nouveau terminal pour que les commandes soient trouvées.
Sous Windows, télécharge rustup-init.exe depuis rustup.rs et lance-le. Rust a besoin de l'éditeur de liens de Microsoft : si les outils de compilation C++ de Visual Studio ne sont pas installés, l'installeur te propose de les installer. Accepte, c'est le plus simple. Tu peux aussi travailler dans WSL et suivre la méthode Linux.
Vérifie ensuite l'installation :
rustc --version
cargo --version
rustc 1.99.1 (58cf8f9c3 2026-10-13)
cargo 1.99.1 (…)
Ton numéro de version peut être différent : ce qui compte, c'est que les deux commandes répondent. Si le terminal affiche command not found, ferme-le et rouvre-le ; sous Linux et macOS, source "$HOME/.cargo/env" recharge le chemin dans le terminal courant.
Quelques commandes rustup à connaître :
| Commande | Rôle |
|---|---|
rustup update | Installer la dernière version stable |
rustup show | Voir la version et la chaîne d'outils actives |
rustup doc --book | Ouvrir le livre officiel The Rust Programming Language, hors ligne |
rustup component add clippy rustfmt | Ajouter l'analyseur et le formateur (souvent déjà présents) |
Côté éditeur, installe VS Code et l'extension rust-analyzer : complétion, types affichés au survol, erreurs soulignées pendant la frappe. Les IDE de JetBrains proposent aussi RustRover. Pour essayer un bout de code sans rien installer, le Rust Playground compile et exécute dans le navigateur.
Créer un projet avec cargo
Cargo est le gestionnaire de projets de Rust : il crée les projets, télécharge les bibliothèques, compile, lance les tests et produit la version finale. C'est l'équivalent de npm pour Node.js ou de dotnet pour C#. Tu l'utiliseras bien plus souvent que le compilateur rustc lui-même.
cargo new parc
cd parc
Creating binary (application) `parc` package
Cargo a créé ce dossier, et initialisé un dépôt Git au passage :
parc/
├── .gitignore
├── Cargo.toml
└── src/
└── main.rs
Le fichier Cargo.toml décrit le projet, au format TOML :
[package]
name = "parc"
version = "0.1.0"
edition = "2024"
[dependencies]
edition = "2024" fixe l'édition du langage. La section [dependencies] listera les bibliothèques externes, que Rust appelle des crates ; elle est vide pour l'instant.
Le fichier src/main.rs contient déjà un programme. Remplace son message par celui de l'outil :
fn main() {
println!("Parc informatique de Sorbier Logistique");
}
fn main()déclare la fonction principale, par laquelle le programme démarre.println!affiche une ligne. Le!indique une macro, pas une fonction : une macro génère du code à la compilation. Tu en croiseras d'autres, commeformat!etvec!.- Les instructions se terminent par un point-virgule, et l'indentation de quatre espaces est la convention.
Lance le programme :
cargo run
Compiling parc v0.1.0 (/home/julie/parc)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.42s
Running `target/debug/parc`
Parc informatique de Sorbier Logistique
cargo run compile, puis exécute. Le programme compilé est un vrai exécutable, rangé dans target/debug/parc (ou parc.exe sous Windows) : tu peux le copier sur une autre machine du même système et le lancer sans installer Rust.
| Commande | Rôle |
|---|---|
cargo new nom | Créer un projet (exécutable) |
cargo run | Compiler puis lancer |
cargo build | Compiler en mode développement (target/debug) |
cargo build --release | Compiler avec les optimisations (target/release), pour livrer |
cargo check | Vérifier que le code compile, sans produire d'exécutable : bien plus rapide |
cargo test | Lancer les tests (chapitre 8) |
cargo fmt | Remettre en forme tout le code selon la convention |
cargo clippy | Analyser le code et suggérer des améliorations |
cargo add nom | Ajouter une crate dans Cargo.toml |
Lire un message d'erreur du compilateur
Le compilateur de Rust refuse beaucoup de programmes que d'autres langages accepteraient. En échange, ses messages sont précis et proposent souvent la correction. Retire le ! de println! et relance cargo run :
fn main() {
println("Parc informatique de Sorbier Logistique");
}
error[E0423]: expected function, found macro `println`
--> src/main.rs:2:5
|
2 | println("Parc informatique de Sorbier Logistique");
| ^^^^^^^ not a function
|
help: use `!` to invoke the macro
|
2 | println!("Parc informatique de Sorbier Logistique");
| +
Lis-le dans cet ordre :
- Le code et le résumé :
error[E0423]: expected function, found macro. Le codeE0423identifie le type d'erreur. - L'emplacement :
src/main.rs:2:5, c'est-à-dire fichier, ligne 2, colonne 5. Les^^^^^^^soulignent le passage fautif. - L'aide : la ligne
help:montre la correction, et le+marque ce qu'il faut ajouter.
Pour une explication complète, avec des exemples, tape rustc --explain E0423. Les messages sont en anglais ; le vocabulaire revient toujours, et ce cours traduit les erreurs les plus fréquentes au fil des chapitres.
Exercices
Exercice 1 sur 3 Vrai ou faux Réussi À revoir
Pour chaque affirmation, dis si elle est vraie ou fausse, et corrige celles qui sont fausses.
- Rust utilise un ramasse-miettes, comme C#.
- Un programme Rust compilé peut s'exécuter sur une machine où Rust n'est pas installé.
- Un projet écrit en édition 2021 ne compile plus avec Rust 1.99.
- Les agences de cybersécurité recommandent Rust et aucun autre langage.
cargo checkproduit un exécutable plus vite quecargo build.
Voir la réponseMasquer la réponse de l'exercice 1
- Faux. Rust n'a pas de ramasse-miettes : la mémoire est libérée automatiquement selon des règles de propriété vérifiées à la compilation.
- Vrai. Rust produit un exécutable natif. Il faut seulement le même système (un exécutable Linux ne tourne pas sous Windows).
- Faux. Chaque projet déclare son édition dans
Cargo.toml, et les compilateurs récents compilent toutes les éditions. - Faux. Les recommandations de la NSA et de la CISA portent sur les langages sûrs en mémoire en général : C#, Java, Go, Python, Swift, Rust… Rust se distingue parce qu'il est sûr sans ramasse-miettes, ce qui le rend utilisable là où l'on employait le C.
- Faux.
cargo checkvérifie le code sans produire d'exécutable du tout ; c'est pour cela qu'il est plus rapide.
Tu avais trouvé ?
Exercice 2 sur 3 La bonne commande cargo Réussi À revoir
Quelle commande tapes-tu pour :
- créer un projet nommé
inventaire? - préparer l'exécutable que tu vas déposer sur le serveur de l'entreprise ?
- remettre en forme le code avant un commit ?
- savoir rapidement si ton code compile, sans le lancer ?
- ajouter la bibliothèque
chronoau projet ?
Voir la réponseMasquer la réponse de l'exercice 2
cargo new inventairecargo build --release: l'exécutable optimisé est danstarget/release/.cargo fmtcargo checkcargo add chrono
Tu avais trouvé ?
Exercice 3 sur 3 Corriger d'après le compilateur Réussi À revoir
Ce programme ne compile pas. Voici l'erreur. Corrige le programme.
fn main() {
let marque = "Dell"
println!("Marque : {marque}");
}
error: expected `;`, found `println`
--> src/main.rs:2:24
|
2 | let marque = "Dell"
| ^ help: add `;` here
3 | println!("Marque : {marque}");
| ------- unexpected token
Voir la réponseMasquer la réponse de l'exercice 3
Il manque le point-virgule à la fin de la ligne 2, exactement là où le compilateur le propose :
fn main() {
let marque = "Dell";
println!("Marque : {marque}");
}
Le programme affiche Marque : Dell. Note la syntaxe {marque} : une variable écrite entre accolades dans la chaîne est remplacée par sa valeur.
Tu avais trouvé ?