Avatar ·

Por que no Rust é necessário especificar explicitamente os lifetimes e como isso funciona?

Acabei de começar a aprender Rust e me deparei com o conceito de lifetimes. Honestamente, não entendo por que precisamos especificá-los explicitamente. Em outras linguagens, como C++ ou Java, referências e ponteiros funcionam sem anotações adicionais. Por que o Rust me obriga a escrever `<'a>` e `&'a mut T`? Aqui está um exemplo que me confunde. Quero escrever uma função que retorna uma referência a um elemento de um array pelo índice: ```rust fn get_element(arr: &[i32], index: usize) -> &i32 { &arr[index] } ``` O compilador diz: "missing lifetime specifier". Por que ele não consegue adivinhar sozinho? Eu passo uma referência ao array e retorno uma referência ao seu elemento. É óbvio que o lifetime da referência retornada deve coincidir com o lifetime do array de entrada. Ou então outro exemplo. Quero armazenar uma referência a uma string em uma struct: ```rust struct Person { name: &str, } ``` Novamente erro: "missing lifetime specifier". Por que o Rust não consegue inferir automaticamente que a referência na struct deve viver