Hier lese ich das:
Haskell hat definitiv nicht das fortschrittlichste Typsystem (nicht einmal annähernd, wenn Sie die Forschungssprachen zählen), aber von allen Sprachen, die tatsächlich in der Produktion verwendet werden, ist Haskell wahrscheinlich an der Spitze.
Ich frage also zwei Dinge:
- Welche Forschungssprachen haben leistungsfähigere Typsysteme als Haskell?
- Was verbessern sie?
Ich bin nur ein Programmierer, daher kenne ich nicht viele mathematische Objekte, die in der Typentheorie verwendet werden. Geben Sie bitte sanfte Erklärungen, wenn Sie können.
programming-languages
type-theory
Виталий Олегович
quelle
quelle
Antworten:
Die Frage ist etwas problematisch, da sie auf einer subjektiven Definition von "besser" beruht.
Abhängig getippte Sprachen wie Agda , Idris und Coq haben ein stärkeres Typensystem als Haskell. Das heißt, Sie können die Typen in diesen Sprachen verwenden, um streng mehr Eigenschaften Ihres Codes als in Haskell zu prüfen. Das heißt, es gibt mehr falsche Programme, die abgefangen werden.
Dies hat jedoch einen Preis: Eine Typinferenz und die Prüfung, ob Werte eines bestimmten Typs vorhanden sind, ist nicht mehr möglich. Dies bedeutet, dass Sie für diese Sprachen Ihren Code explizit mit Typen versehen müssen. Im Wesentlichen läuft dies darauf hinaus, Ihre eigenen Korrektheitsnachweise für Ihren Code zu schreiben.
Sind diese Sprachen "besser" als Haskell? Sie können erweiterte Korrektheitsnachweise für Ihren Code überprüfen, aber nicht automatisch die Eigenschaften Ihres Codes nachweisen, wie dies bei Haskell der Fall ist.
Eine andere Forschungssprache, die "besser" ist als Haskell, ist LiquidHaskell . Dies ist im Grunde Haskell mit aufgeschraubten Verfeinerungstypen, die anhand spezieller Kommentare analysiert wurden.
Mit Verfeinerungstypen können Sie Typen mit Eigenschaften verfeinern. Anstelle von a
Int
können Sie beispielsweise{i : Int | i > 0}
den Typ aller positiven Ganzzahlen angeben . Bei Verfeinerungstypen ist eine Typinferenz entscheidend, aber Sie können mit ihnen nicht annähernd so viele Korrektheitseigenschaften nachweisen wie mit abhängigen Typen.Es gibt noch andere Verfeinerungssysteme, mit denen ich jedoch nicht besonders vertraut bin.
quelle
Die ML-Sprachfamilie (StandardML, OCaml ) hat eine ähnliche Tradition wie Haskell und verfügt daher über ähnliche Typsysteme. Sie sind jedoch nicht genau mit Haskell identisch, und einige ihrer Funktionen passen möglicherweise besser zu Ihnen (es gibt kein objektiv besseres Typensystem, da es Typensysteme in Programmiersprachen gibt, die dem Menschen helfen ). Hier sind einige Funktionen von OCaml, die Haskell entweder nicht hat (aber möglicherweise ein entsprechendes ähnliches Konzept hat), oder Haskell hat es aber anders gemacht:
Und bitte, es ist nicht nötig, dies in ein ML-Haskell-Shootout zu verwandeln, sonst werde ich anfangen, auf Bob Harpers Blog-Posts zu verlinken ;-)
quelle
Die Forschungssprache Clean hat ein besseres Typensystem als Haskell, weil sie Eindeutigkeitstypen hat . Die Ideen hinter den Eindeutigkeitstypen sind eng mit der linearen Logik verwandt , die der ressourcenbeschränkten "realen Welt" näher steht als die klassische Logik.
Die Antiforschungssprache Rust hat auch ein Typensystem mit einzigartigen Eigenschaften, die der "realen Welt" näher kommen als klassische reine Typensysteme. Die meisten Ideen, die das Typensystem beeinflussten, wurden völlig unabhängig von Rust veröffentlicht, lange bevor es überhaupt existierte. Aber die Art und Weise, wie diese alten Ideen zusammengefügt werden, ist einzigartig und verdient auch echte Forschungspublikationen, selbst wenn bekannte Lücken und Inkonsistenzen bestehen.
quelle