Ich komme aus C ++ und verstehe nicht, warum man als erstklassiger Bürger Typen / Typausdrücke braucht. Die einzige mir bekannte Sprache, die diese Funktion unterstützt, ist Aldor.
Hat jemand Literatur über Typen als erstklassiger Bürger oder kennt er einige Gründe, warum dies nützlich ist?
Antworten:
Erstklassige Typen ermöglichen eine sogenannte abhängige Typisierung . Diese ermöglichen es dem Programmierer, Werte von Typen auf Textebene zu verwenden. Beispielsweise ist der Typ aller Ganzzahlpaare ein regulärer Typ, während das Paar aller Ganzzahlen mit der linken Zahl, die kleiner als die rechte Zahl ist, ein abhängiger Typ ist. Das Standard-Einführungsbeispiel hierfür sind längencodierte Listen (normalerweise
Vector
in Haskell / Idris genannt). Der folgende Pseudocode ist eine Mischung aus Idris und Haskell.Dieser Code sagt uns zwei Dinge:
cons
Wenn Sie ein Element in eine Liste aufnehmen, wird eine Längenliste erstelltn + 1
Das sieht einem anderen Konzept mit 0 sehr ähnlich und
n + 1
nicht wahr? Ich werde darauf zurückkommen.Was gewinnen wir daraus? Wir können jetzt zusätzliche Eigenschaften der von uns verwendeten Funktionen bestimmen. Beispiel: Eine wichtige Eigenschaft von
append
ist, dass die Länge der resultierenden Liste die Summe der Längen der beiden Argumentlisten ist:Alles in allem scheint diese Technik in der täglichen Programmierung nicht allzu nützlich zu sein. Wie hängt das mit Sockets,
POST
/GET
Anfragen usw. zusammen?Nun, das tut es nicht (zumindest nicht ohne großen Aufwand). Aber es kann uns auf andere Weise helfen:
Abhängige Typen ermöglichen es uns, Invarianten in Code-Regeln so zu formulieren, wie sich eine Funktion verhalten muss. Mit diesen erhalten wir zusätzliche Sicherheit für das Verhalten des Codes, ähnlich wie bei Eiffels Vor- und Nachbedingungen. Dies ist äußerst nützlich für die automatisierte Theoremprüfung, die eine der möglichen Anwendungen für Idris darstellt.
Zurück zum obigen Beispiel: Die Definition von längencodierten Listen ähnelt dem mathematischen Konzept der Induktion . In Idris können Sie das Konzept der Induktion auf einer solchen Liste wie folgt formulieren:
Diese Technik beschränkt sich auf konstruktive Beweise, ist aber dennoch sehr leistungsfähig. Sie können versuchen,
append
als Übung induktiv zu schreiben .Abhängige Typen sind natürlich nur eine Verwendung erstklassiger Typen, aber es ist wohl eine der häufigsten. Weitere Verwendungszwecke sind beispielsweise die Rückgabe eines bestimmten Typs von einer Funktion anhand ihrer Argumente.
Dies ist ein unsinniges Beispiel, aber es zeigt etwas, das Sie ohne erstklassige Typen nicht emulieren können.
quelle