Tipos Rust - Taxonomia
Por Nikita Bishonen • 4 minutos de leitura •
Olá! Hoje vou compartilhar minhas reflexões sobre a taxonomia de tipos em Rust. Esta é a primeira versão da taxonomia e do artigo, serei grato por qualquer ideia para melhorá-la.
Taxonomia
Taxonomia (do grego antigo τάξις — ordem e νόμος — lei) — ciência dos princípios e práticas de classificação e sistematização de entidades complexas hierarquicamente relacionadas.
Quis adicionar à minha estante uma ilustração gráfica da “taxonomia” do sistema de tipos de dados, semelhante à que o Rust utiliza. Infelizmente, minhas buscas não trouxeram o resultado desejado e decidi criar minha própria ilustração e compartilhá-la com vocês nesta publicação.
Tipos
Teorias
Existem muitas teorias, algumas delas decorrência da história do desenvolvimento da ciência da computação, outras possuem valor prático real e fundamentação teórica. Vou citar dois links para teorias populares das duas categorias:
Mas não vou tentar mergulhar nos detalhes, pois entendo-os com dificuldade, que dirá sobre a capacidade de explicá-los.

Teoria de tipos e Rust
Na verdade, a pergunta principal que eu procurava responder era a teoria de tipos por trás do Rust e sua projeção para os tipos que usamos ao escrever código Rust.
Não é o único a fazer essa pergunta: https://users.rust-lang.org/t/practical-intro-to-type-theory/18204/5
Também há uma palestra curta sobre esse tema: https://av.tib.eu/media/52178
“Mental model”: https://ia0.github.io/unsafe-mental-model/type-theory.html
E também um post interessante: https://www.kurtlawrence.info/blog/category-theory-with-rust-pt1
Mas todos eles têm muita verbosidade e não possuem um “gráfico abrangente” para que eu pendurasse na parede.
Taxonomia de Tipos de Rust

No final, com base nos meus conhecimentos teóricos, criei a primeira versão dessa taxonomia. Gosto muito de usar árvores (especialmente binárias) para construir hierarquias; parece-me que assim é mais fácil navegar e compreender a essência delas. A própria visualização é, é claro, o objetivo desta publicação, mas para os leitores interessados e inexperientes, apresento algumas explicações e links abaixo.
Tipo P
Tipo produto — ou seja, não dá nem para imaginar. Combinamos vários tipos em um, obtemos o produto dos valores possíveis desses tipos como um novo conjunto de valores. Quais tipos em Rust o implementam?
- Tupla: Tuple
- Estrutura: Struct
- Tuple Struct: Tuple Struct
- Unit-like Struct: Unit-Like Struct
- Array: Array
- Slice: Slice
Tipo Σ
Tipo soma — ao contrário do tipo P, o tipo soma oferece um controle mais estrito sobre os valores possíveis dos tipos utilizados.
- Enum: Tagged Union
- Option: Option
- Result: Result
Tipos ponteiros
O Rust possui capacidades para trabalhar com memória, por isso a linguagem contém referências e ponteiros. O que nos interessa são apenas as “conceitos de alto nível”.
- Referências: References
- Ponteiros inteligentes
- Box: Aloca um valor no heap. Box
- Rc/Arc: Contadores de referência. Reference counters
- Ref/RefMut + RefCell: Empréstimo em nível de execução do programa. Runtime borrowing
Outros tipos
- Funções: Não pertencem à versão atual da taxonomia, por isso estão apresentadas apenas como referência.
- Closures: Closures
- FnOnce: Documentation
- FnMut: Documentation
- Fn: Documentation
- Trait Objects: Trait Objects
- Phantom Data: Phantom Data