¿Qué lenguajes de investigación tienen un sistema de tipos más fuerte que Haskell y por qué?

14

Aquí leo eso:

Haskell definitivamente no tiene el sistema de tipos más avanzado (ni siquiera cerca si cuenta los idiomas de investigación), pero de todos los idiomas que realmente se usan en la producción, Haskell probablemente esté en la cima.

Entonces estoy preguntando dos cosas:

  1. qué lenguajes de investigación tienen sistemas de tipos más potentes que Haskell;
  2. ¿Qué mejoran?

Solo soy un programador, por lo que no conozco muchos objetos matemáticos utilizados en la teoría de tipos, por favor proporcione explicaciones suaves si puede.

Виталий Олегович
fuente
3
Que es mejor"?
David Richerby
2
@DavidRicherby Supongo que eso significa un sistema de tipos más potente
Виталий Олегович
2
Una vez que haya demostrado que un sistema de tipos es completo de Turing , ¿realmente importa? ;-)
DevSolar
77
Las máquinas de Turing están completas, ¿por qué no las usa para sus tareas de programación diarias?
gallais
44
Tenga en cuenta que el texto original menciona idiomas con sistemas de tipos más avanzados y no hace ninguna afirmación si "más avanzado" es mejor o peor para un sistema de tipos.
Peteris

Respuestas:

25

La pregunta es algo problemática, ya que se basa en una definición subjetiva de "mejor".

Los lenguajes de tipo dependiente como Agda , Idris y Coq tienen un sistema de tipos más fuerte que Haskell. Esto significa que puede usar los tipos en estos idiomas para probar estrictamente más propiedades sobre su código que en Haskell. Es decir, hay más programas incorrectos que serán capturados.

Sin embargo, esto tiene un precio: la inferencia de tipos y probar si existen valores de un tipo dado, ya no son posibles. Esto significa que para estos idiomas, debe anotar explícitamente su código con tipos. Esencialmente, esto se reduce a escribir sus propias pruebas de corrección para su código.

Entonces, ¿son estos idiomas "mejores" que Haskell? Pueden verificar pruebas avanzadas de corrección para su código, pero no pueden probar automáticamente las propiedades de su código de la manera en que Haskell puede hacerlo.

Otro lenguaje de investigación que es "mejor" que Haskell es LiquidHaskell . Esto es básicamente Haskell con tipos de refinamiento atornillados en la parte superior, analizados a partir de comentarios especiales.

Los tipos de refinamiento le permiten refinar tipos con propiedades. Por ejemplo, en lugar de tener un Int, puede especificar {i : Int | i > 0}, dando el tipo de todos los enteros positivos. La inferencia de tipos es decidible con los tipos de refinamiento, pero no puede probar con ellos tantas propiedades de corrección como con los tipos dependientes.

Existen otros sistemas de tipo de refinamiento, pero no estoy muy familiarizado con ninguno de ellos.

jmite
fuente
¡Gracias! ¿Es posible demostrar que el sistema de tipos Haskell es el más fuerte que aún permite la inferencia de tipos?
Виталий Олегович
3
Haskell definitivamente NO es el más fuerte que permite la inferencia de tipos. Los tipos de refinamiento que he mencionado permiten la inferencia de tipos, y se están agregando muchas extensiones de GHC a Haskell que permiten un sistema de tipos ligeramente más fuerte.
jmite
44
Además de esto, hay muchos sistemas de tipos, y muchos son incomparables: serán más fuertes que Haskell en algunos aspectos, pero más débiles que Haskell en otros. No hay un ordenamiento lineal de los sistemas de tipos del más fuerte al más débil.
jmite
55
Ahora quiero demostrar que no hay un sistema de tipos más fuerte que permita la inferencia de tipos. Debe resistir probar hechos inútiles.
Andrej Bauer
1
El hecho no me parece inútil. El conocimiento de que existe un sistema de tipo más fuerte con inferencia de tipo sería de gran interés, especialmente si resultara factible implementarlo.
racionalis
10

La familia de lenguajes ML (StandardML, OCaml ) surge de una tradición similar a la de Haskell y, por lo tanto, tiene sistemas de tipos similares. Sin embargo, no son exactamente lo mismo que Haskell, y algunas de sus características podrían adaptarse mejor a usted (no existe un sistema de tipos objetivamente mejor porque los sistemas de tipos en lenguajes de programación existen para ayudar a los humanos ). Aquí hay algunas características de OCaml que Haskell no tiene (pero podría tener un concepto similar correspondiente), o Haskell sí, pero lo hizo de manera diferente:

  1. Variantes polimórficas .
  2. Objetos con subtipos de profundidad y clases .
  3. Functores , que son mapas entre módulos (Haskell tiene módulos) e incluso módulos de primera clase

Y por favor, no hay necesidad de convertir esto en un tiroteo de ML-Haskell, o de lo contrario comenzaré a vincular a las publicaciones del blog de Bob Harper ;-)

Andrej Bauer
fuente
9

El lenguaje de investigación Clean tiene un mejor sistema de tipos que Haskell, porque tiene tipos únicos . Las ideas detrás de los tipos de singularidad están estrechamente relacionadas con la lógica lineal , que está más cerca del "mundo real" limitado de recursos que la lógica clásica.

El lenguaje anti-investigación Rust también tiene un sistema de tipos con características únicas que están más cerca del "mundo real" que los sistemas de tipos puros clásicos. La mayoría de las ideas que influyeron en el sistema de tipos se han publicado completamente independientes de Rust mucho antes de que existiera. Pero la forma en que se combinan estas viejas ideas es única, y también merecería publicaciones de investigación reales, incluso si existen lagunas e inconsistencias conocidas.

Thomas Klimpel
fuente
3
De alguna manera, "publicado" y "anti-investigación" no van bien juntos.
Andrej Bauer
1
La singularidad es ciertamente un concepto interesante, pero IMO se trata más de la semántica, en lugar de una característica del sistema de tipos como tal. ¿Y esto realmente hace que el sistema de tipos sea estrictamente mejor ? ¿Puede Clean hacer las cosas más nuevas que Haskell ha agregado a su sistema de tipos, polimorfismos de alto rango, etc.? ¿Son posibles algunos de estos incluso cuando el sistema de tipos ya necesita lidiar con la unicidad?
Leftaroundabout
1
@leftaroundabout ¿Qué tan familiarizado está con los tipos de unicidad o la lógica lineal? Si x tiene un tipo único, entonces f (x, x) no está bien escrito, por ejemplo. Es posible extender Haskell para admitir también tipos de unicidad. La semántica de movimiento en C ++ también podría verse como una mejora en el soporte para tipos de acceso únicos además de un sistema de tipos existente.
Thomas Klimpel
Estoy familiarizado con la semántica de movimientos de C ++, tal vez por eso mi impresión de singularidad es como "no una gran cosa del sistema de tipos". Lo que me parece interesante es: ¿los tipos únicos de propagación externa obstaculizan otras características del sistema de tipos avanzado?
Leftaroundabout
1
@leftaroundabout Las referencias de Rvalue me parecen un sistema de tipos. ¿Por qué los tipos de unicidad obstaculizan otras características de tipo avanzado? En el peor de los casos, esas características avanzadas simplemente no se aplicarían a los tipos de unicidad. Por supuesto, las características del "mundo real", como los tipos de unicidad, significan ir por la amplitud en lugar de la profundidad, y el tiempo que dedique a ir más allá ya no estará allí para profundizar. Pero tengo la impresión de que los tipos de unicidad ofrecen un buen equilibrio entre la teoría y la práctica, por lo que creo que el tiempo sería bueno.
Thomas Klimpel