Esta é uma boa pergunta! Ele pergunta o que esperamos dos tipos em um idioma digitado.
Primeiro, observe que podemos digitar qualquer linguagem de programação com o unitype : basta escolher uma letra, digamos U
e dizer que todo programa tem tipo U
. Isso não é muito útil, mas faz um ponto.
eAeAAint
Não há fim para quão expressivos seus tipos podem ser. Em princípio, eles podem ser qualquer tipo de afirmação lógica, podem usar teoria das categorias e outros enfeites etc. Por exemplo, tipos dependentes permitem expressar coisas como "essa função mapeia listas para listar, de modo que a saída seja uma entrada classificada". Você pode ir além, no momento, estou ouvindo uma palestra sobre "lógicas de separação simultâneas", que permite falar sobre como os programas simultâneos funcionam com o estado compartilhado. Coisa chique.
A arte dos tipos no design da linguagem de programação é a de equilibrar expressividade e simplicidade :
- tipos mais expressivos nos permitem explicar com mais detalhes (a nós mesmos e ao compilador) o que deveria estar acontecendo
- tipos mais simples são mais fáceis de entender e podem ser automatizados mais facilmente no compilador. (As pessoas criam tipos que requerem essencialmente um assistente de prova e a entrada do usuário para fazer a verificação do tipo.)
A simplicidade não deve ser subestimada, pois nem todo programador possui um doutorado em teoria das linguagens de programação.
Então, voltemos à sua pergunta: como você sabe que seu sistema de tipos é bom ? Bem, prove os teoremas que mostram que seus tipos estão equilibrados. Haverá dois tipos de teoremas:
Teoremas que dizem que seus tipos são úteis . Saber que um programa tem um tipo deve implicar algumas garantias, por exemplo, que o programa não ficará preso (isso seria um teorema de Segurança ). Outra família de teoremas conectaria os tipos a modelos semânticos, para que possamos começar a usar matemática real para provar coisas sobre nossos programas (esses seriam os teoremas da adequação e muitos outros). A unidade acima é ruim porque não possui teoremas úteis.
Teoremas que dizem que seus tipos são simples . Um básico seria que é decidível se uma determinada expressão tem um determinado tipo. Outro recurso de simplicidade é fornecer um algoritmo para inferir um tipo. Outros teoremas sobre simplicidade seriam: que uma expressão tem no máximo um tipo ou que uma expressão tem um tipo principal (isto é, o "melhor" entre todos os tipos que possui).
É difícil ser mais específico porque os tipos são um mecanismo muito geral. Mas espero que você veja o que deve filmar. Como a maioria dos aspectos do design da linguagem de programação, não há medida absoluta de sucesso. Em vez disso, existe um espaço de possibilidades de design, e o importante é entender onde você está ou deseja estar no espaço.