Un atelier Rust · Édition d'ApprentissageA Rust Workshop · Learning Edition

Borrowing, ou la règle aliasing XOR mutation Borrowing, or the aliasing XOR mutation rule

Emprunter (& / &mut) au lieu de céder : regarder une donnée sans la posséder. Et la règle d'or — un seul &mut, ou autant de & qu'on veut, jamais les deux — qui ne contraint pas le langage mais retourne la définition même d'une course de données en interdiction. Borrow (& / &mut) instead of handing over: look at data without owning it. And the golden rule — one &mut, or as many & as you like, never both — which doesn't constrain the language but flips the very definition of a data race into a prohibition.

AudienceAudience
Dev venant d'un langage à GC, prêt à raisonner possession Dev from a GC language, ready to reason about ownership
Format
Self-paced
ChapitresChapters
5
Date
Juin 2026 Jun 2026
≈ 22 min ●○○○ PossessionEmpruntAliasing

Chapitre 1 en accès libre — la suite (ch. 2 à 5) est réservée. Chapter 1 free to read — the rest (ch. 2–5) is members-only.

01CadrageFraming3 min

Prêter une donnée. La regarder sans la posséder.Lend a value. Look at it without owning it.

Le numéro précédent finissait sur une promesse : avant de cloner, demande-toi si tu voulais seulement lire. Voici la réponse. Un emprunt — une référence, le & — donne accès à une donnée sans en transférer la possession. La fonction lit, le propriétaire d'origine garde tout. Pas de move, pas de clone, pas d'allocation.The previous issue ended on a promise: before cloning, ask whether you only meant to read. Here's the answer. A borrow — a reference, the & — gives access to a value without transferring its ownership. The function reads, the original owner keeps everything. No move, no clone, no allocation.

L'emprunt partagé — & : je lis, je ne possède pasThe shared borrow — &: I read, I don't own
fn longueur(s: &String) -> usize {   // & : on EMPRUNTE, on ne possède pas
    s.len()
}                                     // s sort de portée, mais ne droppe rien

let nom = String::from("Ada");
let n = longueur(&nom);               // on prête nom le temps de l'appel
println!("{nom} fait {n} lettres");   // nom est toujours à nous
Qui possède, qui emprunte ?Who owns, who borrows?
nom
possède "Ada"owns "Ada"
pointe vers, ne possède paspoints to, doesn't own
&nom
emprunt · lecture seuleborrow · read-only

La référence &nom pointe vers la donnée mais ne la possède pas : quand elle disparaît, rien n'est libéré. nom reste l'unique propriétaire.The reference &nom points to the data but doesn't own it: when it disappears, nothing is freed. nom stays the sole owner.

Deux sortes d'empruntTwo kinds of borrow

&T — emprunt partagé : pour lire. On peut en avoir autant qu'on veut en même temps. &mut T — emprunt exclusif : pour muter. Il ne peut y en avoir qu'un, et aucun autre accès pendant ce temps. Toute la suite tient dans la tension entre ces deux-là.&Tshared borrow: to read. You can have as many as you like at once. &mut Texclusive borrow: to mutate. There can be only one, and no other access while it lives. Everything that follows fits in the tension between these two.

Le réflexe du numéro.The issue's reflex.

« Cette donnée — je la lis, ou je la mute ? Et combien d'accès en même temps ? » La réponse choisit la référence : & pour lire à plusieurs, &mut pour muter seul. Se tromper de réponse, c'est le combat contre le borrow checker.'This data — am I reading it, or mutating it? And how many accesses at once?' The answer picks the reference: & to read with others, &mut to mutate alone. Getting the answer wrong is the fight against the borrow checker.

🔒

La suite est réservée The rest is members-only

Le premier numéro est libre. Débloque tout The Rust Loop — tous les volumes, à vie — pour 5 €, paiement unique. The first issue is free. Unlock all of The Rust Loop — every volume, forever — for €5, one-time.

Retour au kiosqueBack to newsstand