Rust Inseguro (Unsafe)
A linguagem Rust tem duas partes:
- Rust Seguro (Safe): memória segura, nenhum comportamento indefinido é possível.
- Rust Inseguro (Unsafe): pode desencadear comportamento indefinido se pré-condições forem violadas.
Veremos principalmente Rust seguro neste curso, mas é importante saber o que é Rust inseguro.
Código inseguro é geralmente pequeno e isolado, e seu funcionamento correto deve ser cuidadosamente documentado. Geralmente é envolto em uma camada de abstração segura.
O código inseguro do Rust oferece acesso a cinco novos recursos:
- Desreferenciar ponteiros brutos (raw pointers).
- Acessar ou modificar variáveis estáticas mutáveis.
- Acessar os campos de uma
union
. - Chamar funções
unsafe
(inseguras), incluindo funçõesextern
(externas). - Implementar traits
unsafe
.
A seguir, abordaremos brevemente os recursos inseguros. Para detalhes completos, consulte o Capítulo 19.1 no Rust Book e o Rustonomicon.
Rust inseguro não significa que o código esteja incorreto. Significa que os desenvolvedores desligaram os recursos de segurança do compilador e precisam escrever o código corretamente por eles mesmos. Significa também que o compilador não impõe mais as regras de segurança de memória do Rust.