URL: https://linuxfr.org/forums/programmationautre/posts/rust-lapin-compris-les-durees-de-vie Title: Rust : lapin compris les durées de vie Authors: Élafru Date: 2021年06月29日T16:28:00+02:00 License: CC By-SA Tags: rust et programmation Score: 1 Bonjours mesdames messieurs, J'essaye de me rafraîchir la mémoire sur le langage Rust, que je n'ai pas pratiqué depuis 1 ou 2 ans. Pour cela je lis «The Rust Programming Language», document officiel qui décrit ses caractéristiques. Arrivé au chapitre 10.3 sur les durées de vie, je me retrouve face à une question sans réponse. On nous présente ce bout de code : ``` fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len()> y.len() { x } else { y } } ``` On nous explique qu'on est obligé de spécifier la durée de vie «`'a`» sur les deux entrées et sur la sortie de la fonction. L'explication, c'est que le compilateur ne sait pas si c'est une référence vers `x` ou `y` qui va sortir, donc il ne sait pas quelle durée de vie vérifier. Je comprends bien cette contrainte, en effet l'emprunt du `if` ou du `else` sera décidé à l'exécution. Ce que je ne comprends pas, c'est pourquoi, dans ce cas là, le compilateur ne liste pas toutes les possibilités, puis s'appuie sur la durée de vie la plus limitée ? Pour reprendre l'exemple plus haut, pourquoi le compilateur ne peut-il pas suivre cet algorithme : 1. Lister toutes les références qui peuvent atterrir en sortie (ici donc, `x` et `y`) 2. Estimer la durée de vie de chacune 3. Choisir la plus mauvaise, comme ça on évite les erreurs de référence nulle Pourquoi est-ce qu'on doit utiliser cette syntaxe «`'a`» pour lui dire de le faire ? Ne peut-il pas le faire sans qu'on lui demande ? Merci d'avance !