Estas são as vidas nomeadas de Rust.
Citando da The Rust Programming Language :
Cada referência em Rust tem um tempo de vida, que é o escopo para o qual essa referência é válida. Na maioria das vezes, as vidas são implícitas e inferidas, assim como a maioria dos tipos de tempo são inferidas. Da mesma forma que quando temos que anotar tipos porque vários tipos são possíveis, há casos em que os tempos de vida das referências podem ser relacionados de algumas maneiras diferentes, então Rust precisa de nós para anotar os relacionamentos usando parâmetros de vida útil genéricos para que ele possa ter certeza de que o referências reais usadas em tempo de execução serão definitivamente válidas.
As anotações vitalícias não alteram por quanto tempo nenhuma das referências envolvidas vive. Da mesma forma que as funções podem aceitar qualquer tipo quando a assinatura especifica um parâmetro de tipo genérico, as funções podem aceitar referências com qualquer tempo de vida quando a assinatura especifica um parâmetro de tempo de vida genérico. O que as anotações de tempo de vida fazem é relacionar os tempos de vida de várias referências entre si.
As anotações de tempo de vida têm uma sintaxe um pouco incomum: os nomes dos parâmetros de tempo de vida devem começar com um apóstrofo '
. Os nomes dos parâmetros vitalícios são geralmente todos em minúsculas e, como os tipos genéricos, seus nomes são geralmente muito curtos. 'a
é o nome que a maioria das pessoas usa como padrão. As anotações de parâmetro de tempo de vida vêm após o &
de uma referência e um espaço separa a anotação de tempo de vida do tipo de referência.
Dito de outra forma, um tempo de vida se aproxima do período de execução durante o qual os dados para os quais uma referência aponta são válidos. O compilador Rust irá inferir de forma conservadora o menor tempo de vida possível para ser seguro. Se você quiser dizer ao compilador que uma referência dura mais do que a estimativa mais curta, você pode nomeá-la, dizendo que a referência de saída, por exemplo, tem o mesmo tempo de vida de uma determinada referência de entrada.
A 'static
vida é uma vida especial, a mais longa de todas as vidas - durante o programa. Um exemplo típico são strings "literais" que sempre estarão disponíveis durante a vida útil do programa / módulo.
Você pode obter mais informações nesta apresentação de slides , começando pelo slide 29.
Lifetimes in Rust também discute vidas com alguma profundidade.