Lifetimes y mutabilidad interior
11 pasos en 5 series de Rust.
Las anotaciones que casi todo el mundo evita hasta que ya no puede. Los lifetimes no son una característica aparte pegada al final: son la notación del borrow checker, y leerlos es sobre todo cuestión de acostumbrarse a la sintaxis.
Luego prestar sin copiar, mutabilidad interior con Cell y RefCell para los casos donde hay que doblar las reglas sin romperlas, y guardar comportamiento en un struct. Once pasos, y es el tour que hace que los mensajes de error empiecen a tener sentido.
Anotaciones de lifetime
- Anotaciones de lifetimeSi una función devuelve una referencia, el compilador debe saber de qué entrada presta.
- Structs que prestanUn struct que guarda una referencia lleva un lifetime, atado a los datos que lee.
- Reglas de elisiónLa mayoría de las firmas no necesita anotación: tres reglas infieren el caso obvio.
- El lifetime 'static'static significa que la referencia vale todo el programa, no que el valor nunca se mueva.
Prestar sin copiar
- Cow: presta hasta que debas poseerClone-on-write devuelve un préstamo si nada cambió y un valor propio cuando sí.
- Devolver un iterador que prestaUn iterador sobre datos prestados ata su lifetime a la colección.
Mutabilidad interior
- RefCell y mutabilidad interiorRefCell verifica los préstamos en ejecución, así que un valor compartido aún puede mutarse.
- Rc<RefCell<T>>Propiedad compartida más mutabilidad interior: varios handles a un mismo valor mutable.
- Las referencias Weak rompen ciclosUn hijo que apunta a su padre debe hacerlo débilmente, o nada se libera jamás.
Comportamiento guardado
- Guardar closuresUn closure tiene un tipo innombrable; un struct lo guarda en un Box tras Fn.
Bis
- tokenizer.rsUn tokenizador de copia cero: cada token es un slice del código fuente original.