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

Lifetimes, ou le temps inscrit dans le type Lifetimes, or time written into the type

L'annotation ne rallonge aucune vie : elle relie des durées pour que le compilateur prouve qu'aucune référence ne survit à sa donnée. On part du use-after-free que Rust refuse, pas de la syntaxe. The annotation lengthens no life: it links durations so the compiler can prove no reference outlives its data. We start from the use-after-free Rust refuses, not from syntax.

AudienceAudience
Dev ayant intégré move, borrowing et slices (Vol 1) Dev who has internalized move, borrowing and slices (Vol 1)
Format
Self-paced
ChapitresChapters
5
Date
Juin 2026 Jun 2026
≈ 18 min ●●○○ LifetimesRéférencesPreuve

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

Une référence ne doit jamais survivre à sa donnée.A reference must never outlive its data.

Le Vol 1 s'est clos sur une question laissée ouverte : une slice pointe à l'intérieur d'une donnée qu'elle ne possède pas — que se passe-t-il si le propriétaire la libère pendant que la vue regarde encore ? Dans un langage à pointeurs nus, c'est le use-after-free : un pointeur qui désigne de la mémoire déjà rendue. La cause numéro un de failles mémoire. Rust en fait une erreur de compilation. Voici comment il s'y prend.Vol 1 closed on a question left open: a slice points inside data it doesn't own — what happens if the owner frees it while the view is still looking? In a raw-pointer language, that's use-after-free: a pointer designating already-returned memory. The number-one cause of memory vulnerabilities. Rust turns it into a compile error. Here's how.

Le use-after-free que Rust refuse de compilerThe use-after-free Rust refuses to compile
let r;                       // une référence...
{
    let x = 5;               // x naît ici
    r = &x;                  // r emprunte x
}                            // x meurt ICI — sa mémoire est libérée

println!("{r}");             // ✕ r désignerait de la mémoire morte
// error[E0597]: `x` does not live long enough
Ce que voit le compilateurWhat the compiler sees
x
r = &x
temps d'exécution →execution time →

Le compilateur attribue à chaque valeur une durée de vie — un intervalle entre sa naissance et sa libération. La règle est unique : une référence ne peut être utilisée que pendant l'intervalle où sa donnée est vivante. Ici, r prétend vivre plus longtemps que x — la barre dépasse. Refusé.The compiler assigns every value a lifetime — an interval between its birth and its release. The rule is single: a reference may only be used while its data is alive. Here, r claims to live longer than x — the bar overruns. Refused.

Le réflexe du numéroThe issue's reflex

« Cette référence, de quelle donnée tient-elle sa vie, et cette donnée vit-elle assez longtemps ? » Les lifetimes ne sont pas une syntaxe à mémoriser : ce sont les durées que le compilateur suivait déjà, rendues parfois explicites quand il ne peut plus les déduire seul.'This reference — which data does it draw its life from, and does that data live long enough?' Lifetimes aren't a syntax to memorize: they're the durations the compiler already tracked, made explicit only when it can no longer infer them alone.

Rien de nouveau, en vérité.Nothing new, really.

Tu as déjà rencontré les lifetimes au Vol 1 sans les nommer : le borrow checker qui refusait un emprunt « qui traîne », c'était déjà une question de durée. Ce volume ne fait que donner un nom — et une notation, 'a — à ce que le compilateur calculait en silence. La syntaxe vient en dernier, et seulement quand elle est nécessaire.You already met lifetimes in Vol 1 without naming them: the borrow checker refusing a borrow that 'lingered' was already a question of duration. This volume only gives a name — and a notation, 'a — to what the compiler computed silently. The syntax comes last, and only when it's needed.

🔒

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