Question

Où puis-je obtenir un papier / doc / whatever qui décrit comment un compilateur Haskell fonctionne réellement? J'ai lu un assez grand nombre des documents de GHC, mais arrêté après avoir obtenu un mal de tête. Donc, ce qui ne nécessite pas un doctorat pour comprendre et n'est pas écrit dans le supposé-Trovit facilite à être-déjà familier avec le style-il serait préférable. Ce n'est pas un problème si elle est vraiment long et prend un certain temps pour le comprendre bien.

PS:. Le plus intéressant serait quelque chose GHC, mais tout est ok

Était-ce utile?

La solution

Vous pouvez obtenir une réponse de la bouche du cheval! Simon Peyton Jones (Assistant GHC) a écrit un livre expliquant comment mettre en œuvre les langages de programmation fonctionnels. Il est disponible gratuitement en ligne, car il est maintenant épuisé:

Autres conseils

Vous cherchez des détails en particulier au sujet compilant-évaluation paresseuse? Il y a Simon livre de Peyton-Jones mentionné par Max Bolingbroke, aussi le livre détaillant la mise en œuvre de Clean est en ligne:

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

Si vous avez une affiliation universitaire et que vous voulez quelque chose de plus petit, vous pouvez essayer d'obtenir ces livres (Henderson & Diller sont certainement épuisés):

Antoni Diller "Langues" Fonction __gVirt_NP_NN_NNPS<__ Compiler ISBN 0 471 92027 4

Peter Henderson "Application de la programmation fonctionnelle et mise en œuvre" ISBN 0-13-331579-7

AJT Davie "Introduction à la programmation fonctionnelle en utilisant des systèmes Haskell" ISBN 0 521 27724 8

Diller a un compilateur complet pour un langage paresseux (mis en œuvre Pascal) par la réduction de Combinator. Ce fut la technique de mise en œuvre inventée par David Turner pour SASL. Henderson a de nombreuses parties d'un compilateur pour LISPkit une miniature, variante paresseuse de Lisp. Davie détails un peu des machines pour la compilation d'une langue paresseuse, par exemple, il y a une description des thats STG beaucoup plus courtes que le livre de Simon Peyton-Jones (STG est la machine abstraite SPJ utilisée pour Haskell).

Les développeurs propres sont assez peu d'informations sur la mise en œuvre SAPL (un simple Applicative Language) si vous regardez à travers leur liste de publications:

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

Enfin, il y a un certain nombre de documents qui documentent les aspects du compilateur Haskell Utrecht UHC (et EHC). Je pense que la plupart des informations est de savoir comment le compilateur est organisé (avec grammaires d'attributs et « Shuffle ») et comment les systèmes de type (il y a différents niveaux de système de type à EHC) sont mis en œuvre, plutôt que de la façon dont l'arrière-plan « compilation » travaux.

Malheureusement, je pense que ce que vous cherchez n'existe pas. la théorie du compilateur et de la théorie formelle du langage sont des sujets moyennement complexes en informatique et Haskell est pas un point de départ.

Tout d'abord, vous devriez probablement obtenir une bonne mise à la terre dans:

Je ne soupçonne rien d'expliquer quoi que ce soit sur le fonctionnement interne de Haskell nécessiterait une compréhension nettement mieux des sujets ci-dessus que par exemple, C serait.

J'ai pris un seul cours sur le sujet jusqu'à présent, donc je n'ai pas la littérature officielle de recommander, mais je suis sûr qu'il existe de nombreuses sources.

sont Compilateurs un énorme sujet et il serait impossible de les expliquer en entier ici. Mais voici un aperçu pour un compilateur général. Espérons que cela vous donnera une certaine compréhension qui peut rendre la lecture des choses spécifiquement au sujet GHC un peu plus facile à comprendre.

compilateurs généralement travail par une série de transformations en 2 parties, la fin de l'avant et d'arrière-plan.

La première transformation se transforme en texte brut quelque chose d'un peu plus facile à traverser. Ce lui-même est généralement divisé en 2 parties:

Analyse ou lexicales Tokenisation - L'acte de transformer le texte brut en petits morceaux (généralement les opérateurs, identificateurs, littéraux etc).

Analyse Syntaxique ou Parsing - La transformation de ces petits morceaux dans une structure arborescente. (Généralement un AST, un arbre syntaxe abstraite)

La prochaine étape est l'analyse sémantique. Dans cette étape un compilateur généralement ajouter des informations à l'AST (comme des informations de type) et construire une table de symboles. Voilà qui conclut la fin de l'avant.

La prochaine transformation transforme l'AST en un IR, une représentation intermédiaire . Ceci est généralement, de nos jours une forme SSA, Affectation statique unique.

Il est ensuite optimisé, par propagation constante, analyse de code mort, etc vectorisation.

La dernière transformation est la génération de code. Transformer l'IR en code machine. Cela peut être très compliqué. Il est aussi parfois appelée descente.

Pour plus d'informations je vous recommande cette page wikipedia .

Wikipedia a une bonne - lisible - aperçu des éléments internes du GHC (similaire à l'explication @ dan_waterworth, mais spécifiques à Haskell et le GHC):

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

L'un des meilleurs articles sur ce sujet que j'ai lu est:

  • compilateur Glasgow Haskell par Simon Marlow et Simon Peyton-Jones. Architecture des applications Open Source.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top