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 o Arc.
  • 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”.