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 Core, mais je n'ai pas trouvé grand-chose.
Quelle documentation est disponible pour lire GHC Core?
Voici ce que j'ai trouvé jusqu'à présent:
Réponses:
GHC Core est le langage System FC dans lequel tout Haskell est traduit. La grammaire (approximative) pour Core est donnée par:
Core est étroitement lié au système F plus simple et mieux connu . Toutes les transformations effectuées par GHC au niveau Core sont des refactorisations de préservation du type de cette représentation Core, 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 en 2002, sans-LLVM et CMM):
Les principaux documents pour en savoir plus sur GHC Core sont:
Matériel connexe pouvant aider à la compréhension:
Core à son tour est traduit en code STG, qui ressemble à quelque chose comme:
Les noms amusants dans Core sont encodés dans le "Z-encoding":
Types et types de GHC Core (d'après l'article de Tolmach):
Enfin, les primops de GHC apparaissent régulièrement dans la sortie de GHC Core, lorsque vous avez optimisé votre Haskell jusqu'aux instructions de base que GHC connaît. L'ensemble primop est donné sous la forme d'un ensemble de fonctions Core dans un fichier prétraité.
la source
Un conseil: si vous ne vous souciez pas des annotations de type et des coercitions, utilisez-
-ddump-simpl
les avec l'-dsuppress-all
option. La sortie Core devrait être beaucoup plus lisible.la source
-dsuppress-all
est vraiment utile. Vous pouvez également l'utiliser-dsuppress-coercions
si vous souhaitez uniquement vous débarrasser des cast (utile lorsqu'il y a beaucoup de nouveaux types autour).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 effectué un exercice de vérification de la sécurité de type du langage STG + machine, et ensuite j'ai découvert que je pouvais facilement comprendre Core.
Le texte que j'ai utilisé pour apprendre STG est assez accessible: Implémentation de langages fonctionnels paresseux sur du matériel de stock: la machine G Spineless Tagless de 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 des décisions de conception contre-intuitives et fournit des traductions d'exemples familiers tels que
map
.la source
"Une représentation externe pour le langage de base GHC" est un document qui peut être trouvé dans l'installation de ghc (
share/doc/ghc/core.pdf
) ou sur Internet .la source