Kern ist die Zwischensprache von GHC. Mit Reading Core können Sie die Leistung Ihres Programms besser verstehen. Jemand bat mich um Dokumentation oder Tutorials zum Lesen von Core, aber ich konnte nicht viel finden.
Welche Dokumentation steht zum Lesen von GHC Core zur Verfügung?
Folgendes habe ich bisher gefunden:
GHC Core ist die System FC Sprache, in die Haskell übersetzt wird. Die (ungefähre) Grammatik für Core ist gegeben durch:
Kern ist eng verwandt mit dem einfacheren und bekannteren System F . Alle Transformationen, die GHC auf der Core-Ebene ausführt sind typerhaltende Umgestaltungen dieser Core-Darstellung, um die Leistung zu verbessern. Und, nicht so bekannt, Sie können direkt in Core schreiben, um GHC zu programmieren.
GHC Core passt in die Compiler-Pipeline (wie schon 2002, sans-LLVM und CMM):
Die wichtigsten Dokumente zum Erlernen von GHC Core sind:
Zugehöriges Material, das das Verständnis erleichtern kann:
Der Kern wiederum wird in STG-Code übersetzt, der ungefähr so aussieht:
Die lustigen Namen in Core sind in der "Z-Kodierung" kodiert:
Typen und Arten des GHC-Kerns (aus Tolmachs Papier):
Schließlich erscheinen GHCs Primops regelmäßig in der GHC Core-Ausgabe, wenn Sie Ihre Haskell auf die grundlegenden Anweisungen hin optimiert haben, die GHC kennt. Die Primop-Menge wird als eine Menge von Kernfunktionen in einer vorverarbeiteten Datei angegeben
Ein Tipp: Wenn Sie sich nicht für Typanmerkungen und Zwänge interessieren, verwenden Sie -ddump-simpl
zusammen mit dem -dsuppress-all
Möglichkeit. Die Core-Ausgabe sollte besser lesbar sein.
Obwohl nicht gerade die GHC-Kernsprache, ist die STG-Sprache, wie Don erwähnt, ziemlich ähnlich. Ich habe kürzlich die Übung zum Prüfen der Typensicherheit der STG language + machine durchlaufen und danach festgestellt, dass ich Core leicht verstehen kann.
Der Text, den ich zum Erlernen von STG verwendet habe, ist leicht zugänglich: Implementierung fauler funktionaler Sprachen auf Lager Hardware: Die spineless tagless G-Maschine von Simon Peyton-Jones. Ein Großteil des Papiers befasst sich mit Implementierungsdetails, aber ich empfehle Abschnitt 4 insbesondere als umfassende Erklärung der STG-Sprache, die Motivation für einige der kontraintuitiven Entwurfsentscheidungen liefert und Übersetzungen bekannter Beispiele wie map
.
"Eine externe Repräsentation für die GHC-Kernsprache" ist ein Dokument, das in der Installation von ghc (share/doc/ghc/core.pdf
) oder im Internet .