Quali lingue di ricerca hanno un sistema più forte di Haskell e perché?


14

Qui ho letto che:

Haskell sicuramente non ha il sistema di tipi più avanzato (nemmeno vicino se si contano le lingue di ricerca) ma tra tutte le lingue che sono effettivamente utilizzate nella produzione, Haskell è probabilmente al top.

Quindi sto chiedendo due cose:

  1. quali linguaggi di ricerca hanno sistemi di tipi più potenti di Haskell;
  2. cosa migliorano

Sono solo un programmatore, quindi non conosco molti oggetti matematici usati nella teoria dei tipi, per favore fornisci spiegazioni gentili se puoi.


3
Cosa c'è di "meglio"?
David Richerby,

2
@DavidRicherby Immagino che significhi un sistema di tipo più potente
Виталий Олегович,

2
Dopo aver dimostrato che un sistema di tipi è completo di Turing , importa davvero? ;-)
DevSolar,

7
Le macchine di Turing sono complete di Turing, perché non le usi per le tue attività di programmazione quotidiane?
gallais,

4
Si noti che il testo originale menziona le lingue con sistemi di tipi più avanzati e non fa alcuna affermazione se "più avanzato" è migliore o peggiore per un sistema di tipi.
Peteris,

Risposte:


25

La domanda è alquanto problematica, poiché si basa su una definizione soggettiva di "migliore".

Lingue tipicamente dipendenti come Agda , Idris e Coq hanno un sistema di tipi più forte di Haskell. Ciò significa che è possibile utilizzare i tipi in queste lingue per dimostrare più proprietà del codice rispetto a Haskell. Cioè, ci saranno più programmi errati che verranno catturati.

Tuttavia, questo ha un prezzo: l'inferenza del tipo e la verifica dell'esistenza di valori di un determinato tipo non sono più possibili. Ciò significa che per queste lingue, è necessario annotare esplicitamente il codice con i tipi. Fondamentalmente questo si riduce a scrivere le tue prove di correttezza per il tuo codice.

Quindi queste lingue sono "migliori" di Haskell? Possono verificare le prove avanzate di correttezza per il tuo codice, ma non possono provare automaticamente le proprietà del tuo codice come può fare Haskell.

Un altro linguaggio di ricerca "migliore" di Haskell è LiquidHaskell . Questo è fondamentalmente Haskell con tipi di raffinamento imbullonati in alto, analizzati da commenti speciali.

I tipi di perfezionamento ti consentono di perfezionare i tipi con proprietà. Ad esempio, invece di avere unInt , puoi specificare {i : Int | i > 0}, fornendo il tipo di tutti i numeri interi positivi. L'inferenza del tipo è decidibile con i tipi di perfezionamento, ma non è possibile dimostrare con loro quasi tutte le proprietà di correttezza che è possibile con i tipi dipendenti.

Esistono altri sistemi di perfezionamento, ma non ho molta familiarità con nessuno di essi.


Grazie! È possibile dimostrare che il sistema di tipi di Haskell è il più forte che consente ancora l'inferenza di tipo?
Виталий Олегович,

3
Haskell's NON è sicuramente il più forte che consente l'inferenza di tipo. I tipi di perfezionamento che ho citato consentono l'inferenza di tipo e molte estensioni GHC vengono aggiunte a Haskell che consentono un sistema di tipo leggermente più potente.
jmite,

4
Inoltre, ci sono molti sistemi di tipi e molti sono incomparabili: saranno più forti di Haskell in alcuni modi, ma più deboli di Haskell in altri. Non esiste un ordinamento lineare dei sistemi di tipi dal più forte al più debole.
jmite,

5
Ora voglio dimostrare che non esiste un sistema di tipi più forte che consenta l'inferenza di tipo. Deve resistere alla prova di fatti inutili.
Andrej Bauer,

1
Il fatto non mi sembra inutile. Sapere che esiste un sistema di tipi più forte con deduzione di tipo sarebbe di grande interesse, specialmente se si rivelasse fattibile da implementare.
rationalis,

10

La famiglia di lingue ML (StandardML, OCaml ) deriva da una tradizione simile a quella di Haskell e quindi ha sistemi di tipo simili. Tuttavia, non sono esattamente gli stessi di Haskell e alcune delle loro caratteristiche potrebbero adattarsi meglio a te (non esiste un sistema di tipi oggettivamente migliore perché esistono sistemi di tipo nei linguaggi di programmazione per aiutare gli umani ). Ecco alcune caratteristiche di OCaml che Haskell non ha (ma potrebbe avere un concetto simile corrispondente), o Haskell ha fatto ma ha fatto diversamente:

  1. Varianti polimorfiche .
  2. Oggetti con sottotitoli di profondità e classi .
  3. I portatori , che sono mappe tra i moduli (Haskell ha i moduli) e persino i moduli di prima classe

E per favore, non è necessario trasformarlo in una sparatoria di ML-Haskell, altrimenti inizierò a collegarmi ai post del blog di Bob Harper ;-)


9

Il linguaggio di ricerca Clean ha un sistema di tipi migliore di Haskell, perché ha tipi di unicità . Le idee alla base dei tipi di unicità sono strettamente correlate alla logica lineare , che è più vicina al "mondo reale" limitato alle risorse rispetto alla logica classica.

Il linguaggio anti-ricerca Rust ha anche un sistema di tipi con caratteristiche uniche che sono più vicine al "mondo reale" rispetto ai classici sistemi di tipo puro. La maggior parte delle idee che hanno influenzato il sistema dei tipi sono state pubblicate completamente indipendenti da Rust molto prima ancora che esistesse. Ma il modo in cui queste vecchie idee sono messe insieme è unico e meriterebbe anche vere pubblicazioni di ricerca, anche se esistono scappatoie e incongruenze note.


3
In qualche modo "pubblicato" e "anti-ricerca" non vanno bene insieme.
Andrej Bauer,

1
L'unicità è certamente un concetto interessante, ma IMO riguarda più la semantica, piuttosto che una caratteristica del sistema di tipo in quanto tale. E questo rende davvero il sistema dei tipi decisamente migliore ? Clean può fare le cose più recenti che Haskell ha aggiunto al suo sistema di tipi, polimorfismo di alto rango ecc. - Alcuni di questi sono persino possibili quando il sistema di tipi ha già bisogno di affrontare l'unicità?
lasciato circa il

1
@leftaroundabout Quanto conosci i tipi di unicità o la logica lineare? Se x ha un tipo univoco, ad esempio f (x, x) non è ben digitato. Potrebbe essere possibile estendere Haskell per supportare anche i tipi di unicità. La semantica di spostamento in C ++ potrebbe anche essere vista come un miglioramento del supporto per i tipi di unicità su un sistema di tipi esistente.
Thomas Klimpel,

Ho familiarità con la semantica del movimento C ++, forse è per questo che la mia impressione di unicità è come "non molto di un sistema di tipo". Ciò che troverei interessante è che i tipi di unicità che si propagano verso l'esterno ostacolano altre funzionalità del sistema di tipi avanzato?
lasciato circa il

1
@leftaroundabout I riferimenti a valori mi sembrano una cosa del sistema di tipo. Perché i tipi di unicità dovrebbero ostacolare altre funzionalità di tipo avanzato? Nel peggiore dei casi, tali funzionalità avanzate semplicemente non si applicano ai tipi di unicità. Ovviamente, caratteristiche del "mondo reale" come i tipi di unicità significano andare in ampiezza invece che in profondità, e il tempo che spendi per andare più in là non sarà più lì per andare più in profondità. Ma ho l'impressione che i tipi di unicità offrano un buon equilibrio tra teoria e pratica, quindi penso che il tempo sarebbe ben speso.
Thomas Klimpel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.