Garantías en Tiempo de Compilación
Gestión estática de la memoria en tiempo de compilación:
- No hay variables no inicializadas.
- No hay pérdidas de memoria (casi siempre, consulta las notas).
- No hay errores double free.
- No hay errores use-after-free.
- No hay punteros
NULL
. - No se olvidan las exclusiones mutuas bloqueadas.
- No hay condiciones de carrera de datos entre hilos.
- No se invalidan los iteradores.
Es posible producir pérdidas de memoria en (safe) Rust. Estos son algunos ejemplos:
- Puedes usar
Box::leak
para perder un puntero. Esto podría usarse para obtener variables estáticas iniciadas y medidas en runtime. - Puedes usar
std::mem::forget
para que el compilador “olvide” un valor (lo que significa que el destructor nunca se ejecuta). - También puedes crear por accidente una referencia circular con
Rc
oArc
. - De hecho, algunos consideran que poblar de forma infinita una colección es una fuga de memoria y Rust no protege de ellas.
En este curso, “sin pérdidas de memoria” debe entenderse como “casi ninguna pérdida de memoria accidental”.