Ich habe etwas über das Implementieren abhängiger Typen gelernt, wie dieses Tutorial , aber die meisten von ihnen implementieren Dolmetscher. Meine Frage ist, es scheint, dass die Implementierung eines Compilers für abhängige Typen viel schwieriger ist als ein Compiler, da Sie die Argumente für abhängige Typen für die Typprüfung wirklich auswerten können.
So
- Ist mein naiver Eindruck richtig?
- Wenn es richtig ist, gibt es ein Beispiel / Ressourcen zur Implementierung einer statisch überprüften Sprache, die den abhängigen Typ unterstützt?
type-systems
compilers
dependent-type
Molikto
quelle
quelle
ocamlopt
oder GHC :-) (Dies ist übrigens derAntworten:
Das ist eine interessante Frage! Wie aus Anthonys Antwort hervorgeht, können die üblichen Ansätze zum Kompilieren einer nicht abhängigen Funktionssprache verwendet werden, vorausgesetzt, Sie haben bereits einen Interpreter, um Begriffe für die Typprüfung zu bewerten .
Dies ist der Ansatz von Edwin Brady. Dies ist konzeptionell einfacher, verliert jedoch die Geschwindigkeitsvorteile der Kompilierung bei der Typprüfung. Dies wurde auf verschiedene Weise angegangen.
Erstens kann man eine virtuelle Maschine implementieren, die Begriffe im laufenden Betrieb zu Bytecode kompiliert, um die Konvertierungsprüfung durchzuführen. Dies ist die Idee,
vm_compute
die Benjamin Gregoire in Coq umgesetzt hat . Anscheinend gibt es auch diese These von Dirk Kleeblatt zu diesem genauen Thema, aber eher den tatsächlichen Maschinencode als eine virtuelle Maschine.Zweitens kann man Code in einer konventionelleren Sprache erzeugen, die bei der Ausführung alle Konvertierungen überprüft, die zur Typprüfung eines abhängig typisierten Programms erforderlich sind. Dies bedeutet, dass wir beispielsweise Haskell verwenden können, um ein Agda-Modul auf Typ zu überprüfen. Der Code kann kompiliert und ausgeführt werden. Wenn er akzeptiert wird, kann davon ausgegangen werden, dass der Code in der Sprache des abhängigen Typs gut typisiert ist (mit Ausnahme von Implementierungs- und Compilerfehlern). Ich habe diesen von Mathieu Boesflug vorgeschlagenen Ansatz zum ersten Mal gehört .
quelle
In der Doktorarbeit von Edwin Brady wird beschrieben, wie ein Compiler für eine abhängig typisierte Programmiersprache erstellt wird. Ich bin kein Experte, aber ich würde sagen, es ist nicht extrem schwieriger als die Implementierung eines System F-ähnlichen Compilers. Viele der Prinzipien sind sehr ähnlich und einige sind gleich (z. B. Zusammenstellung von Superkombinatoren). Die Arbeit behandelt viele andere Aspekte.
quelle