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

L'élision, ou pourquoi 90 % des lifetimes ne s'écrivent pas Elision, or why 90% of lifetimes go unwritten

Les trois règles que le compilateur applique seul pour deviner les durées de vie — et pourquoi on n'annote que lorsqu'il reste une vraie ambiguïté à lever. The three rules the compiler applies on its own to infer lifetimes — and why you annotate only when a genuine ambiguity remains.

AudienceAudience
Dev ayant vu les lifetimes (Vol 2 №1) Dev who has seen lifetimes (Vol 2 №1)
Format
Self-paced
ChapitresChapters
5
Date
Juin 2026 Jun 2026
≈ 18 min ●●○○ LifetimesÉlision

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

Tu écris déjà des lifetimes. Le compilateur les tait pour toi.You already write lifetimes. The compiler silences them for you.

Le numéro précédent s'est clos sur un paradoxe : si les lifetimes font si peur, pourquoi en croise-t-on si peu dans le vrai code ? Parce que le compilateur en déduit l'immense majorité tout seul — pas par magie, ni par devinette, mais par trois règles parfaitement mécaniques qu'il applique à chaque signature. C'est l'élision. La comprendre, c'est savoir exactement quand le silence suffit, et quand il faut écrire le 'a soi-même.The previous issue closed on a paradox: if lifetimes are so frightening, why do we meet so few in real code? Because the compiler infers the vast majority on its own — not by magic, nor by guessing, but through three perfectly mechanical rules it applies to every signature. That's elision. To understand it is to know exactly when silence suffices, and when you must write the 'a yourself.

La fonction du Vol 1 №3 — sans annotation, et pourtant correcteThe Vol 1 №3 function — unannotated, yet correct
fn premier_mot(s: &str) -> &str {        // aucun 'a, et pourtant ça compile
    s.split(' ').next().unwrap_or("")
}

// Ce que le compilateur lit RÉELLEMENT, en silence :
fn premier_mot<'a>(s: &'a str) -> &'a str { /* ... */ }
Élision ≠ absence de lifetimeElision ≠ absence of lifetime

Le piège mental serait de croire que premier_mot n'a « pas de lifetime ». Faux : la référence rendue en a forcément un. Simplement, le compilateur l'a reconstruit pour toi avant la vérification. L'élision n'efface rien — elle remplit les annotations évidentes pour que tu n'aies pas à les taper. Le contrat de durée est là, exactement comme si tu l'avais écrit.The mental trap would be to think premier_mot has 'no lifetime'. False: the returned reference necessarily has one. The compiler simply reconstructed it for you before checking. Elision erases nothing — it fills in the obvious annotations so you needn't type them. The duration contract is there, exactly as if you'd written it.

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

« Le compilateur peut-il deviner sans ambiguïté à quelle entrée rattacher la sortie ? » Si oui, il élide et tu n'écris rien. S'il reste plusieurs candidats possibles, il s'arrête et réclame le 'a. Connaître les trois règles, c'est prévoir sa réponse avant de compiler.'Can the compiler unambiguously guess which input to tie the output to?' If yes, it elides and you write nothing. If several candidates remain, it stops and demands the 'a. Knowing the three rules means predicting its answer before you compile.

Trois règles, pas une IA.Three rules, not an AI.

L'élision n'est pas de l'inférence intelligente : c'est un algorithme fixe, écrit dans la référence du langage, qui n'examine que la signature — jamais le corps. Trois règles appliquées dans l'ordre. Si, après les trois, une sortie reste sans durée attribuée, c'est une erreur de compilation, pas un pari. Déterministe de bout en bout.Elision isn't clever inference: it's a fixed algorithm, written in the language reference, that examines only the signature — never the body. Three rules applied in order. If, after all three, an output still lacks an assigned duration, it's a compile error, not a gamble. Deterministic end to end.

🔒

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