Pourquoi Rust nécessite-t-il de spécifier explicitement les durées de vie (lifetimes) et comment cela fonctionne-t-il ?
Je viens de commencer à apprendre Rust et j'ai rencontré le concept de durée de vie (lifetimes). Honnêtement, je ne comprends pas pourquoi il faut les spécifier explicitement. Dans d'autres langages, comme C++ ou Java, les références et les pointeurs fonctionnent sans annotations supplémentaires. Pourquoi Rust m'oblige-t-il à écrire `<'a>` et `&'a mut T` ?
Voici un exemple qui me trouble. Je veux écrire une fonction qui retourne une référence à un élément d'un tableau par index :
```rust
fn get_element(arr: &[i32], index: usize) -> &i32 {
&arr[index]
}
```
Le compilateur dit : "missing lifetime specifier". Pourquoi ne peut-il pas le déduire tout seul ? Je passe une référence au tableau et je retourne une référence à son élément. Il est évident que la durée de vie de la référence retournée doit correspondre à celle du tableau d'entrée.
Ou encore cet autre exemple. Je veux stocker une référence à une chaîne dans une structure :
```rust
struct Person {
name: &str,
}
```
Encore une erreur : "missing lifetime specifier". Pourquoi Rust ne peut-il pas déduire automatiquement que la référence dans la structure doit vivre