Encontrei vários tipos em Rust denotados com um único apóstrofo:
'static
'r
'a
Qual é o significado desse apóstrofo? Talvez seja um modificador de referências ( &
)? Digitação genérica específica para referências? Não tenho ideia de onde a documentação para isso está escondida.
Respostas:
Estas são as vidas nomeadas de Rust.
Citando da The Rust Programming Language :
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.
fonte
Para adicionar à excelente resposta do quux00, os tempos de vida nomeados também são usados para indicar a origem de uma variável emprestada retornada para o compilador do rust.
Esta função
pub fn f(a: &str, b: &str) -> &str { b }
não compilará porque retorna um valor emprestado, mas não especifica se o emprestou de
a
oub
.Para corrigir isso, você declararia uma vida útil nomeada e usaria a mesma vida útil para
b
e o tipo de retorno:pub fn f<'r>(a: &str, b: &'r str) -> &'r str { // ---- --- --- b }
e use-o como esperado
f("a", "b")
fonte