webentwicklung-frage-antwort-db.com.de

GHC Core lesen

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:

188
tibbe

GHC Core ist die System FC Sprache, in die Haskell übersetzt wird. Die (ungefähre) Grammatik für Core ist gegeben durch:

enter image description here

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):

enter image description here

Die wichtigsten Dokumente zum Erlernen von GHC Core sind:

Zugehöriges Material, das das Verständnis erleichtern kann:

  • Die GHC-Text-Core-Ausgabe
  • Ich habe viel Zeit damit verbracht, Core durch Lesen der GHC-Quelle zu lernen. Einige sind in meiner Bachelorarbeit von 2002, ab Seite 16 beschrieben.
  • Wenn ich das Tool ghc-core verwende, finde ich es angenehm, Core in einem Format zu generieren.

Der Kern wiederum wird in STG-Code übersetzt, der ungefähr so ​​aussieht:

enter image description here

Die lustigen Namen in Core sind in der "Z-Kodierung" kodiert:

enter image description here

Typen und Arten des GHC-Kerns (aus Tolmachs Papier):

enter image description here

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

263
Don Stewart

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.

24
nominolo

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.

8
acfoltzer

"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 .

3
Roman Cheplyaka