Garantias em Tempo de Compilação

Gerenciamento de memória estática em tempo de compilação:

  • Sem variáveis não inicializadas.
  • Sem vazamentos de memória (quase, veja as notas).
  • Sem double-frees.
  • Sem use-after-free.
  • Sem ponteiros NULL.
  • Sem mutexes bloqueados esquecidos.
  • Sem concorrência de dados entre threads.
  • Sem invalidação de iteradores.

É possível produzir vazamentos de memória no Rust (seguro). Alguns exemplos são:

  • Você pode usar Box::leak para vazar um ponteiro. Um uso para isso poderia ser para obter variáveis estáticas inicializadas e dimensionadas em tempo de execução
  • Você pode usar std::mem::forget para fazer o compilador “esquecer” sobre um valor (o que significa que o destrutor nunca é executado).
  • Você também pode criar acidentalmente uma referência cíclica com Rc ou Arc.
  • Na verdade, alguns considerarão que preencher infinitamente uma coleção (estruturas de dados) seja um vazamento de memória e o Rust não protege disso.

Para o propósito deste curso, “Sem vazamentos de memória” deve ser entendido como “Praticamente sem vazamentos de memória acidentais”.