Closures move en Rust
Un hilo sobrevive al marco de pila de quien llama; debe ser dueño de lo que captura.
use std::thread;
fn main() {
let words = vec!["ada".to_string(), "grace".to_string()];
let mut handles = Vec::new();
for word in words {
handles.push(thread::spawn(move || {
format!("{} has {} letters", word, word.len())
}));
}
for handle in handles {
println!("{}", handle.join().unwrap());
}
}
Cómo funciona
movetransfiere los valores capturados al closure.- Sin él, el borrow checker rechaza el spawn.
- Cada hilo recibe su propia copia o su propio valor.
Palabras clave y builtins usados aquí
Vecfnforinletmovemutuse
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 298
- Tokens
- 102
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 61 segundos.
Paso 2 de 3 en Hilos; paso 2 de 15 en Concurrencia y async.