¿Cuáles son los tipos de Rust indicados con un solo apóstrofe?

89

Encontré varios tipos en Rust denotados con un solo apóstrofe:

'static
'r
'a

¿Cuál es el significado de ese apóstrofe? ¿Quizás es un modificador de referencias ( &)? ¿Tipificación genérica específica para referencias? No tengo idea de dónde se esconde la documentación para esto.

Greg Malcolm
fuente
1
estos se denominan duraciones
Arjan
El enlace del comentario anterior ya no funciona. No sé si esto es equivalente: doc.rust-lang.org/book/lifetimes.html
Ellen Spertus
El enlace de Ellen también dejó de funcionar; aquí está el nuevo (a partir de junio de 2019): doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

Respuestas:

71

Estas son las vidas útiles de Rust.

Citando del lenguaje de programación The Rust :

Cada referencia en Rust tiene una vida útil, que es el alcance para el que esa referencia es válida. La mayoría de las veces, la vida útil es implícita y se infiere, al igual que la mayoría de los tipos de tiempo se infieren. De manera similar a cuando tenemos que anotar tipos porque son posibles varios tipos, hay casos en los que la vida útil de las referencias podría relacionarse de diferentes maneras, por lo que Rust necesita que anotemos las relaciones utilizando parámetros de vida útil genéricos para asegurarse de que Las referencias reales utilizadas en tiempo de ejecución definitivamente serán válidas.

Las anotaciones de por vida no cambian el tiempo de vida de las referencias involucradas. De la misma manera que las funciones pueden aceptar cualquier tipo cuando la firma especifica un parámetro de tipo genérico, las funciones pueden aceptar referencias con cualquier duración cuando la firma especifica un parámetro de duración genérico. Lo que hacen las anotaciones de por vida es relacionar la vida de múltiples referencias entre sí.

Las anotaciones de por vida tienen una sintaxis ligeramente inusual: los nombres de los parámetros de por vida deben comenzar con un apóstrofo '. Los nombres de los parámetros de duración suelen ser todos en minúsculas y, al igual que los tipos genéricos, sus nombres suelen ser muy cortos. 'aes el nombre que la mayoría de la gente usa por defecto. Las anotaciones de parámetros de duración van después &de una referencia y un espacio separa la anotación de duración del tipo de referencia.

Dicho de otra manera, una vida útil se aproxima al lapso de ejecución durante el cual los datos a los que apunta una referencia son válidos. El compilador de Rust deducirá de forma conservadora la vida útil más corta posible para estar seguro. Si desea decirle al compilador que una referencia vive más tiempo que la estimación más corta, puede nombrarla, diciendo que la referencia de salida, por ejemplo, tiene la misma duración que una referencia de entrada dada.

La 'staticvida es una vida especial, la más larga de todas las vidas, durante la duración del programa. Un ejemplo típico son los "literales" de cadena que siempre estarán disponibles durante la vida útil del programa / módulo.

Puede obtener más información en este conjunto de diapositivas , comenzando por la diapositiva 29.

Lifetimes in Rust también analiza las vidas en profundidad.

quux00
fuente