Tipos Rust - Taxonomia

Por Nikita Bishonen4 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.

HoTT

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

Taxonomy

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?

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.

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

Outros tipos