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
ouArc
. - 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”.