Quais linguagens de pesquisa têm um sistema de tipos mais forte que Haskell e por quê?

14

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:

  1. quais linguagens de pesquisa possuem sistemas de tipos mais poderosos do que Haskell;
  2. 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.

Виталий Олегович
fonte
3
O que é melhor"?
David Richerby
2
@DavidRicherby Acho que isso significa mais poderoso sistema de tipo
Виталий Олегович
2
Depois de provar que um sistema de tipos é completo em Turing , isso realmente importa? ;-)
DevSolar 19/08/2015
7
As máquinas de Turing são completas de Turing, por que você não as usa para as tarefas diárias de programação?
Gallais
4
Observe que o texto original menciona idiomas com sistemas de tipos mais avançados e não faz nenhuma afirmação de que "mais avançado" é melhor ou pior para um sistema de tipos.
314 Peteris

Respostas:

25

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.

jmite
fonte
Obrigado! É possível provar que o sistema do tipo Haskell é o mais forte que ainda permite a inferência de tipo?
Виталий Олегович
3
Definitivamente, Haskell NÃO é o mais forte que permite inferência de tipos. Os tipos de refinamento que mencionei permitem a inferência de tipos e muitas extensões do GHC estão sendo adicionadas ao Haskell, o que permite um sistema de tipos um pouco mais forte.
jmite
4
Além disso, existem muitos sistemas de tipos e muitos são incomparáveis: eles serão mais fortes que Haskell em alguns aspectos, mas mais fracos que Haskell em outros. Não há uma ordem linear dos sistemas de tipos, dos mais fortes aos mais fracos.
Jmite 18/08
5
Agora, quero provar que não existe um sistema de tipos mais forte que permita inferência de tipos. Deve resistir a provar fatos inúteis.
Andrej Bauer
1
O fato não me parece inútil. O conhecimento de que existe um sistema de tipos mais forte com inferência de tipos seria de grande interesse, principalmente se fosse viável de implementar.
racionalis
10

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:

  1. Variantes polimórficas .
  2. Objetos com subtipagem e classes de profundidade .
  3. Functors , que são mapas entre módulos (Haskell possui módulos) e até módulos de primeira classe

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 ;-)

Andrej Bauer
fonte
9

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.

Thomas Klimpel
fonte
3
De alguma forma, "publicado" e "anti-pesquisa" não combinam bem.
Andrej Bauer
1
A exclusividade é certamente um conceito interessante, mas o IMO é mais sobre semântica, em vez de um recurso do sistema de tipos como tal. E isso realmente torna o sistema de tipos estritamente melhor ? A Can Clean pode fazer as coisas mais recentes que Haskell adicionou ao seu sistema de tipos, polimorfismo de classificação mais alta etc. - são algumas delas possíveis quando o sistema de tipos já precisa lidar com a exclusividade?
precisa saber é o seguinte
1
@leftaroundabout Você conhece os tipos de exclusividade ou a lógica linear? Se x tiver um tipo único, f (x, x) não será bem digitado, por exemplo. Pode ser possível estender o Haskell para também suportar tipos de exclusividade. A semântica de movimentação no C ++ também pode ser vista como aprimorando o suporte para tipos sem exclusividade em cima de um sistema de tipos existente.
Thomas Klimpel
Eu estou familiarizado com a semântica de movimento do C ++, talvez seja por isso que a minha impressão de exclusividade seja "não muito do sistema de tipos". O que eu acho interessante é que os tipos de exclusividade de propagação externa atrapalham outros recursos do sistema de tipos avançado?
precisa saber é o seguinte
1
@leftaroundabout Rvalue referências soam como uma coisa do sistema de tipos para mim. Por que os tipos de exclusividade devem impedir outros recursos de tipo avançado? Na pior das hipóteses, esses recursos avançados simplesmente não se aplicariam a tipos de exclusividade. Obviamente, recursos do "mundo real", como tipos de exclusividade, significam mais amplitude do que profundidade, e o tempo que você gasta para ampliar vai deixar de existir para aprofundar. Mas tenho a impressão de que os tipos de exclusividade oferecem um bom equilíbrio entre teoria e prática, então acho que o tempo seria bem gasto.
Thomas Klimpel