Frage

Wo kann ich etwas Papier / doc erhalten / was auch immer das beschreibt, wie ein Haskell Compiler tatsächlich funktioniert? Ich las eine ganz wenige der docs von GHC, aber gestoppt, nachdem Kopfschmerzen bekommen. Also etwas, was es nicht versteht, eine PhD erfordern und geschrieben wird nicht in der ich ist-soll-zu-sein-schon-vertraut mit-it-Stil vorzuziehen wäre. Es ist kein Problem, wenn es wirklich lang ist und dauert einige Zeit, es aber zu verstehen.

PS:. Die meisten interessant, etwas über GHC sein würde, aber alles ist in Ordnung

War es hilfreich?

Lösung

Sie können eine Antwort aus dem Mund des Pferdes bekommen! Simon Peyton Jones (GHC-Assistent) schrieb ein Buch zu erklären, wie funktionale Programmiersprachen zu implementieren. Es ist kostenlos Online verfügbar, da es jetzt vergriffen:

Andere Tipps

Suchen Sie Details für besonders über lazy-Auswertung Zusammenstellung? Es Simon Peyton-Jones ist Buch von Max Bolingbroke erwähnt, auch das Buch Saubere Implementierung Detaillierung ist online:

http://wiki.clean.cs.ru.nl/Functional_Programming_and_Parallel_Graph_Rewriting

Wenn Sie eine Hochschulzugehörigkeit haben und wollen etwas kleiner Sie könnten versuchen, diese Bücher zu bekommen (Henderson & Diller ist sicherlich vergreift):

Antoni Diller "Übersetzen Funktion Sprachen" ISBN 0 471 92027 4

Peter Henderson "Functional Programming Anwendung und Implementation" ISBN 0-13-331579-7

AJT Davie "Eine Einführung in der funktionalen Programmierung Systeme mit Haskell" ISBN 0 521 27724 8

Diller hat einen vollen Compiler für einen faulen Sprache (implementiert in Pascal) über combinator Reduktion. Dies war die Umsetzung Technik, die von David Turner für SASL erfunden. Henderson hat viele Teile eines Compilers für LISPkit eine Miniatur, faule Variante von Lisp. Davie Details einiges an der Maschine einen faulen Sprache für die Erstellung, zum Beispiel gibt es eine Beschreibung der STG, das ist viel kürzer als Simon Peyton-Jones Buch (STG ist die abstrakte Maschine SPJ für Haskell verwendet wird).

Die Clean-Entwickler haben ziemlich viele Informationen über SAPL Umsetzung (a Einfach Applicative Language), wenn Sie ihre Publikationsliste durchsehen:

https://clean.cs.ru.nl/Publications

Schließlich gibt es eine ganze Reihe von Papieren Aspekte des Utrecht Haskell Compiler UHC (und EHC) zu dokumentieren. Ich denke, die meisten Informationen ist, wie der Compiler organisiert (mit Attributgrammatiken und „Shuffle“) und wie die Systeme vom Typ (es gibt verschiedene Stufen des Typs System in EHC) umgesetzt werden, anstatt, wie die Back-End ‚Compilation‘ funktioniert.

Leider habe ich vermute, dass das, was Sie suchen existiert nicht. Compiler Theorie und Formale Sprachtheorie sind recht komplexe Themen der Informatik, und Haskell ist keineswegs ein Ausgangspunkt.

Als erstes sollten Sie wahrscheinlich eine gute Erdung erhalten in:

Ich würde alles vermuten, über die Interna von Haskell erklären, etwas würde eine wesentlich erfordern ein besseres Verständnis der oben genannten Themen als etwa C würde.

Ich habe bisher einen einzigen Kurs zum Thema gemacht, so dass ich keine formale Literatur haben zu empfehlen, aber ich bin sicher, es existieren viele gute Quellen.

Compiler ist ein großes Thema, und es wäre unmöglich, sie hier in Gänze zu erklären. Aber hier ist eine Übersicht für einen allgemeinen Compiler. Hoffentlich wird Ihnen ein gewisses Verständnis, dass die Dinge speziell über GHC Lesen ein wenig leichter verständlich machen kann.

Compiler im Allgemeinen Arbeit durch eine Reihe von Transformationen in zwei Teile, die Front-End- und Back-End.

Die erste Transformation dreht Klartext in etwas ein wenig leichter zu durchqueren. Diese selbst ist in der Regel gliedert sich in 2 Teile:

Lexikalische Analyse oder Tokenisierung - Der Akt der Umwandlung Klartext in kleine Stücke (typischerweise Betreiber, Bezeichner, Zeichen usw.).

syntaktische Analyse oder Parsing - Drehen dieser kleinen Stücke in eine Baumstruktur. (Typischerweise ein AST, ein Abstract Syntax-Baum )

Die nächste Stufe ist die semantische Analyse. In dieser Phase wird ein Compiler in der Regel Informationen an den AST (wie Typinformationen) hinzufügen und eine Symboltabelle erstellen. Das schließt die Front-End.

Die nächste Transformation wandelt den AST in einen IR, eine Zwischendarstellung . Dies ist im Allgemeinen heutzutage , eine einzelne statische Zuordnung .

Dies wird dann optimiert, über Konstantenpropagation Dead Code-Analyse, Vektorisierung etc.

Die letzte Transformation Codegenerierung. Umwandlung der IR in Maschinencode. Dies kann sehr kompliziert sein. Es wird auch manchmal als zu senken.

Für weitere Informationen empfehle ich diese Wikipedia-Seite .

Wikipedia hat einen guten - lesbar - Überblick über die Interna des GHC (ähnlich @ dan_waterworth Erklärung, aber spezifisch für Haskell und die GHC):

http://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler#Architecture

Eines der besten Arbeiten zu diesem Thema, dass ich gelesen habe ist:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top