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:
Antworten:
GHC Core ist die System FC- Sprache, in die alle Haskell übersetzt werden. Die (ungefähre) Grammatik für Core ist gegeben durch:
Der Kern ist eng mit dem einfacheren und bekannteren System F verwandt . Alle Transformationen, die GHC auf Core-Ebene durchführt, sind typerhaltende Refactorings dieser Core-Darstellung, um die Leistung zu verbessern. Und, nicht so bekannt, können Sie direkt in Core schreiben, um GHC zu programmieren.
GHC Core passt in die Compiler-Pipeline (wie schon 2002 ohne LLVM und CMM):
Die wichtigsten Dokumente zum Erlernen von GHC Core sind:
Zugehöriges Material, das zum Verständnis beitragen kann:
Core wiederum wird in STG-Code übersetzt, der ungefähr so aussieht:
Die lustigen Namen in Core sind in der "Z-Codierung" codiert:
Arten und Arten von GHC Core (aus Tolmachs Papier):
Schließlich werden die Primops von GHC regelmäßig in der GHC Core-Ausgabe angezeigt , wenn Sie Ihren Haskell auf die grundlegenden Anweisungen optimiert haben, die GHC kennt. Der Primop-Satz wird als Satz von Kernfunktionen in einer vorverarbeiteten Datei angegeben.
quelle
Ein Tipp: Wenn Sie sich nicht für Typanmerkungen und Zwänge interessieren, verwenden Sie diese
-ddump-simpl
zusammen mit der-dsuppress-all
Option. Die Core-Ausgabe sollte viel besser lesbar sein.quelle
-dsuppress-all
ist wirklich nützlich. Sie können es auch verwenden,-dsuppress-coercions
wenn Sie nur Casts entfernen möchten (nützlich, wenn es viele neue Typen gibt).Obwohl nicht gerade die GHC-Kernsprache, ist die STG-Sprache, wie Don erwähnt, ziemlich ähnlich. Ich habe kürzlich die Prüfung der Typensicherheit der STG language + machine durchgeführt und danach festgestellt, dass ich Core leicht verstehen kann.
Der Text, mit dem ich STG gelernt habe, ist leicht zugänglich: Implementierung von Lazy Functional Languages auf Standardhardware: 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 eine umfassende Erklärung der STG-Sprache, die Motivationen für einige der kontraintuitiven Entwurfsentscheidungen liefert und Übersetzungen bekannter Beispiele wie
map
.quelle
"Eine externe Darstellung für die GHC-Kernsprache" ist ein Dokument, das in der Installation von ghc (
share/doc/ghc/core.pdf
) oder im Internet zu finden ist .quelle