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

'static & le combat contre le borrow checker 'static & the fight against the borrow checker

Face à une erreur de lifetime, le débutant annote plus fort jusqu'à abandonner. Le bon réflexe : si les lifetimes deviennent ingérables, c'est le design de possession qui est faux. Facing a lifetime error, the beginner annotates harder until they give up. The right reflex: if lifetimes become unmanageable, it's the ownership design that's wrong.

AudienceAudience
Dev maîtrisant lifetimes et élision (Vol 2 №1–2) Dev fluent in lifetimes and elision (Vol 2 №1–2)
Format
Self-paced
ChapitresChapters
5
Date
Juin 2026 Jun 2026
≈ 18 min ●●●○ Lifetimes'staticDesign

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

La spirale : annoter plus fort, jusqu'à 'static, jusqu'à abandonner.The spiral: annotate harder, up to 'static, until you give up.

Le numéro précédent a donné les trois règles d'élision et le moyen d'écrire une annotation juste. Mais il existe un point au-delà duquel annoter ne corrige plus rien — où chaque 'a ajouté déplace l'erreur sans la résoudre. Le débutant y répond en annotant plus fort, jusqu'au coup de désespoir : coller 'static partout. C'est presque toujours le mauvais geste, et il dit quelque chose de précis — le problème n'est pas dans les durées, il est dans la possession.The previous issue gave the three elision rules and how to write a correct annotation. But there's a point beyond which annotating fixes nothing — where each added 'a moves the error without resolving it. The beginner responds by annotating harder, up to the act of despair: slapping 'static everywhere. It's almost always the wrong move, and it says something precise — the problem isn't in the durations, it's in ownership.

La spirale d'annotation — chaque ligne « répond » à l'erreur précédenteThe annotation spiral — each line 'answers' the previous error
fn dernier<'a>(v: &'a Vec<&'a str>) -> &'a str { /* ... */ }
// erreur ailleurs → on ajoute une durée
fn dernier<'a, 'b>(v: &'a Vec<&'b str>) -> &'b str { /* ... */ }
// erreur encore → on lie les deux
fn dernier<'a, 'b: 'a>(v: &'a Vec<&'b str>) -> &'b str { /* ... */ }
// erreur toujours → le réflexe fatal :
fn dernier(v: &Vec<&'static str>) -> &'static str { /* ... */ }
//                       ^^^^^^^ « vit pour toujours » — la fausse sortie
Ce que 'static signifie vraimentWhat 'static really means

'static n'est pas un mot magique pour « faire taire l'erreur » : c'est la durée la plus longue possible — la donnée vit jusqu'à la fin du programme. L'exiger dans une signature, c'est imposer à l'appelant de ne fournir que des données éternelles (littéraux, fuites mémoire, constantes). On ne lève pas la contrainte : on la durcit à l'extrême, et on la repousse sur tous ceux qui appellent.'static isn't a magic word for 'silence the error': it's the longest possible duration — the data lives until the program ends. Demanding it in a signature forces the caller to supply only eternal data (literals, leaks, constants). You don't lift the constraint: you harden it to the extreme, and push it onto everyone who calls you.

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

« Mes annotations deviennent-elles ingérables ? » Si oui, arrête d'annoter. Une signature qui croule sous les 'a: 'b n'est pas un problème de syntaxe : c'est un diagnostic. Elle dit qu'une structure tente de tenir des références qu'elle devrait posséder. Le remède est en amont, dans le design.'Are my annotations becoming unmanageable?' If so, stop annotating. A signature buckling under 'a: 'b isn't a syntax problem: it's a diagnosis. It says a structure is trying to hold references it ought to own. The cure is upstream, in the design.

'static a deux visages.'static has two faces.

Comme borne de durée sur une référence (&'static str), 'static dit « cette référence est valide pour toujours ». Comme borne sur un type générique (T: 'static), il dit « ce type ne contient aucune référence empruntée à durée courte » — un sens subtilement différent qu'on recroisera au Vol 7 avec les threads. Ici, c'est le premier sens, le piège, qui nous occupe.As a lifetime bound on a reference (&'static str), 'static says 'this reference is valid forever'. As a bound on a generic type (T: 'static), it says 'this type holds no short-lived borrowed reference' — a subtly different meaning we'll meet again in Vol 7 with threads. Here it's the first meaning, the trap, that concerns us.

🔒

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