El lifetime 'static en Rust
'static significa que la referencia vale todo el programa, no que el valor nunca se mueva.
const TITLE: &'static str = "typestar";
static LANGS: [&str; 3] = ["rust", "sql", "css"];
fn remember<T: 'static + std::fmt::Debug>(value: T) {
println!("{:?} can be stored anywhere", value);
}
fn main() {
println!("{TITLE} knows {:?}", LANGS);
let owned = String::from("computed at run time");
let leaked: &'static str = Box::leak(owned.into_boxed_str());
println!("{leaked}");
remember(vec![1, 2, 3]);
}
Cómo funciona
- Los literales de cadena son
&'static str, horneados en el binario. - Un bound
'staticen un genérico significa que es dueño de sus datos. - Fugar un Box a propósito es la manera de crear una en tiempo de ejecución.
Palabras clave y builtins usados aquí
BoxStringconstfnletstaticstr
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 409
- Tokens
- 131
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 75 segundos.
Paso 4 de 4 en Anotaciones de lifetime; paso 4 de 11 en Lifetimes y mutabilidad interior.