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.
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 { /* ... */ }
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 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.
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.