Aqui eu li isso:
O Haskell definitivamente não possui o sistema de tipos mais avançado (nem mesmo próximo, se você contar as linguagens de pesquisa), mas dentre todas as linguagens que são realmente usadas na produção, o Haskell provavelmente está no topo.
Então, eu estou perguntando duas coisas:
- quais linguagens de pesquisa possuem sistemas de tipos mais poderosos do que Haskell;
- o que eles melhoram?
Sou apenas um programador, por isso não conheço muitos objetos matemáticos usados na teoria dos tipos; por favor, forneça explicações suaves, se puder.
programming-languages
type-theory
Виталий Олегович
fonte
fonte
Respostas:
A questão é um tanto problemática, uma vez que se baseia em uma definição subjetiva de "melhor".
Idiomas de tipo dependente, como Agda , Idris e Coq, têm um sistema de tipos mais forte que o Haskell. Isso significa que você pode usar os tipos nessas linguagens para provar mais propriedades sobre o seu código do que no Haskell. Ou seja, existem mais programas incorretos que serão capturados.
No entanto, isso tem um preço: inferência de tipo e testar se existem valores de um determinado tipo, não são mais possíveis. Isso significa que, para esses idiomas, você precisa anotar explicitamente seu código com tipos. Essencialmente, isso se resume a escrever suas próprias provas de correção para o seu código.
Então, essas linguagens são "melhores" que Haskell? Eles podem verificar as provas avançadas de correção do seu código, mas não podem provar automaticamente as propriedades do seu código da maneira que Haskell pode.
Outra linguagem de pesquisa que é "melhor" que Haskell é o LiquidHaskell . Isso é basicamente Haskell, com tipos de refinamento aparafusados no topo, analisados a partir de comentários especiais.
Os tipos de refinamento permitem refinar os tipos com propriedades. Por exemplo, em vez de ter um
Int
, você pode especificar{i : Int | i > 0}
, fornecendo o tipo de todos os números inteiros positivos. A inferência de tipo é decidível com tipos de refinamento, mas você não pode provar quase tantas propriedades de correção com eles quanto com tipos dependentes.Existem outros sistemas de refinamento por aí, mas não estou muito familiarizado com nenhum deles.
fonte
A família de idiomas ML (StandardML, OCaml ) surge de uma tradição semelhante à Haskell e, portanto, possui sistemas de tipos semelhantes. Porém, eles não são exatamente iguais a Haskell, e alguns de seus recursos podem servir melhor a você (não existe um sistema de tipos objetivamente melhor porque os sistemas de tipos nas linguagens de programação existem para ajudar os seres humanos ). Aqui estão alguns recursos do OCaml que Haskell não possui (mas pode ter um conceito semelhante correspondente) ou Haskell, mas fez de maneira diferente:
E, por favor, não há necessidade de transformar isso em um tiroteio com ML-Haskell, ou então começarei a criar um link para as postagens de Bob Harper ;-)
fonte
A linguagem de pesquisa Clean possui um sistema de tipos melhor que o Haskell, porque possui tipos de exclusividade . As idéias por trás dos tipos de exclusividade estão intimamente relacionadas à lógica linear , que é mais próxima do "mundo real" do que a lógica clássica.
A linguagem antipesquisa Rust também possui um sistema de tipos com características únicas mais próximas do "mundo real" do que os sistemas clássicos de tipos puros. A maioria das idéias que influenciaram o sistema de tipos foi publicada completamente independente do Rust muito antes de ele existir. Mas a maneira como essas idéias antigas são reunidas é única e também merece publicações de pesquisa reais, mesmo que existam brechas e inconsistências conhecidas.
fonte