Question Lire GHC Core


Core est le langage intermédiaire de GHC. Reading Core peut vous aider à mieux comprendre les performances de votre programme. Quelqu'un m'a demandé de la documentation ou des tutoriels sur la lecture de base, mais je ne pouvais pas trouver beaucoup.

Quelle documentation est disponible pour lire GHC Core?

Voici ce que j'ai trouvé jusqu'ici:


173
2018-05-25 07:46


origine


Réponses:


GHC Core est le Système FC langue dans laquelle tous Haskell est traduit. La grammaire (approximative) de Core est donnée par:

enter image description here

Core est étroitement lié au plus simple et mieux connu Système F. Tout les transformations du GHC au niveau du Core sont des refactorisations préservant le type de cette représentation de base, pour améliorer les performances. Et, pas si bien connu, vous pouvez écrire directement dans Core pour programmer GHC.

GHC Core s'intègre dans le pipeline du compilateur (comme c'était le cas en 2002, sans-LLVM et CMM):

enter image description here

Les principaux documents à apprendre sur GHC Core sont:

Matériel connexe pouvant aider à comprendre:

  • le Sortie GHC -fext-core
  • J'ai passé beaucoup de temps à apprendre le Core en lisant la source de GHC. Certains sont décrits dans mon Thèse de premier cycle à partir de 2002, à partir de la page 16.
  • D'utiliser le ghc-core outil, pour générer Core dans un format que je trouve agréable.

Core est à son tour traduit en code STG, qui ressemble à quelque chose comme:

enter image description here

Les noms amusants dans Core sont encodés dans le "Z-encoding":

enter image description here

Types et types de GHC Core (tiré du document de Tolmach):

enter image description here

Enfin, les GHC primops apparaissent régulièrement dans la sortie GHC Core, lorsque vous avez optimisé votre Haskell jusqu'aux instructions de base connues de GHC. L'ensemble de primop est donné comme un ensemble de fonctions principales dans un fichier pré-traité. 


252
2018-05-25 08:20



Un conseil: Si vous ne vous souciez pas des annotations de type et des coercitions, utilisez -ddump-simpl avec la -dsuppress-all option. La sortie Core devrait être beaucoup plus lisible.


24
2018-05-26 15:08



Bien que ce ne soit pas exactement le langage GHC Core, comme Don le mentionne, le langage STG est assez similaire. J'ai récemment passé par l'exercice de prouver la sécurité de type du langage STG + machine, et après j'ai trouvé que je pouvais comprendre Core facilement.

Le texte que j'ai utilisé pour apprendre STG est assez accessible: Implémentation des langages fonctionnels paresseux sur le matériel en stock: la G-machine sans tag sans spin par Simon Peyton-Jones. Une grande partie de l'article concerne les détails de mise en œuvre, mais je recommande la section 4 en particulier comme une explication de haut en bas du langage STG qui motive certaines décisions de conception contre-intuitives et fournit des traductions d'exemples familiers comme map.


8
2018-05-26 03:57



"Une représentation externe du GHC Core Language" est un document que vous pouvez trouver dans l’installation de ghc (share/doc/ghc/core.pdf) ou sur Internet.


3
2018-05-25 08:01