Avatar ·

Pourquoi Rust nécessite-t-il de spécifier explicitement les durées de vie (lifetimes) et comment fonctionnent-elles ?

Je suis débutant en Rust et j'essaie de comprendre le concept des durées de vie (lifetimes). J'ai écrit une fonction simple qui retourne une référence à un élément d'un tableau : ```rust fn get_first_element(arr: &[i32]) -> &i32 { &arr[0] } ``` Le compilateur l'a compilée sans problème. Mais quand j'ai essayé d'écrire une fonction qui prend deux références et en retourne une : ```rust fn longest(x: &str, y: &str) -> &str { if x.len() > y.len() { x } else { y } } ``` J'ai obtenu une erreur : "missing lifetime specifier". Pourquoi dans le premier cas le compilateur a-t-il compris tout seul, alors que dans le second il exige une spécification explicite de la durée de vie ? Je pensais que Rust était intelligent et pouvait tout déduire automatiquement. Je comprends que les durées de vie sont nécessaires pour éviter les références pendantes, mais je ne comprends pas la logique selon laquelle dans certains cas elles sont déduites et dans d'autres non. Expliquez-moi, s'il vous plaît, avec des exemples, quand il faut spécifier explicitement une durée de vie et quand on peut s'en passer. Je suis particulièrement intéressé par la raison pour laquelle dans les fonctions simples avec un seul paramètre...