Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

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
2006Graydon Hoare commence Rust comme projet personnel
2009Mozilla, l'éditeur de Firefox, soutient officiellement le projet
Mai 2015Rust 1.0 : le langage est déclaré stable
Février 2021Création de la Rust Foundation, qui porte désormais le projet
Décembre 2022Le noyau Linux 6.1 accepte du code Rust
Février 2025Rust 1.85 stabilise l'édition 2024
Décembre 2025Les 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é :

FaillePrincipeConsé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èmeLecture 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 foisCorruption de la mémoire, plantage
Accès concurrent (data race)Deux fils d'exécution modifient la même donnée en même tempsRé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, PythonC#, JavaC, C++Rust
ExécutionInterprété ou compilé à la voléeCompilé vers une machine virtuelle (.NET, JVM)Compilé en code machineCompilé en code machine
TypageDynamiqueStatiqueStatiqueStatique, avec inférence
Libération de la mémoireRamasse-miettesRamasse-miettesÀ la mainAutomatique, vérifiée à la compilation
Valeur absentenull, undefined, NonenullPointeur nulPas de null : le type Option
ErreursExceptionsExceptionsCodes de retourLe type Result
Programmation objetClassesClasses, héritageClasses 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 :

bash
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 :

bash
rustc --version
cargo --version
text
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 :

CommandeRôle
rustup updateInstaller la dernière version stable
rustup showVoir la version et la chaîne d'outils actives
rustup doc --bookOuvrir le livre officiel The Rust Programming Language, hors ligne
rustup component add clippy rustfmtAjouter 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.

bash
cargo new parc
cd parc
text
    Creating binary (application) `parc` package

Cargo a créé ce dossier, et initialisé un dépôt Git au passage :

text
parc/
├── .gitignore
├── Cargo.toml
└── src/
    └── main.rs

Le fichier Cargo.toml décrit le projet, au format TOML :

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 :

rust
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, comme format! et vec!.
  • Les instructions se terminent par un point-virgule, et l'indentation de quatre espaces est la convention.

Lance le programme :

bash
cargo run
text
   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.

rustupinstalle, met à jourrustccompilateurcargoprojetsstdbibliothèqueCargo.tomlsrc/*.rscargo buildlit, résout, lanceappellerustcvérifie et compilecrates.ioclap, chrono, axum…téléchargeexécutable natiftarget/debug/parctarget/release/parcsans Rust à installer
rustup installe les outils, cargo pilote le projet, rustc produit un exécutable natif
CommandeRôle
cargo new nomCréer un projet (exécutable)
cargo runCompiler puis lancer
cargo buildCompiler en mode développement (target/debug)
cargo build --releaseCompiler avec les optimisations (target/release), pour livrer
cargo checkVérifier que le code compile, sans produire d'exécutable : bien plus rapide
cargo testLancer les tests (chapitre 8)
cargo fmtRemettre en forme tout le code selon la convention
cargo clippyAnalyser le code et suggérer des améliorations
cargo add nomAjouter 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 :

rust
fn main() {
    println("Parc informatique de Sorbier Logistique");
}
text
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 :

  1. Le code et le résumé : error[E0423]: expected function, found macro. Le code E0423 identifie le type d'erreur.
  2. L'emplacement : src/main.rs:2:5, c'est-à-dire fichier, ligne 2, colonne 5. Les ^^^^^^^ soulignent le passage fautif.
  3. 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.

  1. Rust utilise un ramasse-miettes, comme C#.
  2. Un programme Rust compilé peut s'exécuter sur une machine où Rust n'est pas installé.
  3. Un projet écrit en édition 2021 ne compile plus avec Rust 1.99.
  4. Les agences de cybersécurité recommandent Rust et aucun autre langage.
  5. cargo check produit un exécutable plus vite que cargo build.
Voir la réponseMasquer la réponse de l'exercice 1
  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.
  2. Vrai. Rust produit un exécutable natif. Il faut seulement le même système (un exécutable Linux ne tourne pas sous Windows).
  3. Faux. Chaque projet déclare son édition dans Cargo.toml, et les compilateurs récents compilent toutes les éditions.
  4. 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.
  5. Faux. cargo check vé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 :

  1. créer un projet nommé inventaire ?
  2. préparer l'exécutable que tu vas déposer sur le serveur de l'entreprise ?
  3. remettre en forme le code avant un commit ?
  4. savoir rapidement si ton code compile, sans le lancer ?
  5. ajouter la bibliothèque chrono au projet ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. cargo new inventaire
  2. cargo build --release : l'exécutable optimisé est dans target/release/.
  3. cargo fmt
  4. cargo check
  5. cargo 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.

rust
fn main() {
    let marque = "Dell"
    println!("Marque : {marque}");
}
text
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 :

rust
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é ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Variables, types, fonctions et boucles en RustRevoir le sommaire du cours