Чтение GHC Core - PullRequest
       61

Чтение GHC Core

188 голосов
/ 25 мая 2011

Core - это промежуточный язык GHC. Чтение Core может помочь вам лучше понять производительность вашей программы. Кто-то попросил у меня документацию или учебные пособия по чтению Core, но я не смог найти много.

Какая документация доступна для чтения GHC Core?

Вот что я нашел до сих пор:

Ответы [ 4 ]

263 голосов
/ 25 мая 2011

GHC Core - это язык System FC , на который переведен весь Haskell.(Приблизительная) грамматика для ядра определяется следующим образом:

enter image description here

Ядро тесно связано с более простой и известной системой F .Все преобразования , выполняемые GHC на уровне ядра , являются сохраняющими тип рефакторингами этого представления ядра для повышения производительности.И, не очень хорошо известно, вы можете писать прямо в Core для программы GHC.

GHC Core вписывается в конвейер компилятора (как это было в 2002 году, sans-LLVM и CMM):

enter image description here

Основными документами, которые необходимо узнать о ядре GHC, являются:

Связанные материалы, которые могут помочь пониманию:

Ядро в свою очередь переводится в код STG, который выглядит примерно так:

enter image description here

Смешные имена в Core кодируются в "Z-кодировка ":

enter image description here

Типы и виды сердечника GHC (из статьи Толмача):

enter image description here

Наконец, GHC's Примитивы регулярно появляются в выводе GHC Core, когда вы оптимизировали свой Haskell до основных инструкций, о которых GHC знает.Набор примопов представлен в виде набора основных функций в предварительно обработанном файле.

24 голосов
/ 26 мая 2011

Совет: если вас не интересуют аннотации типов и принуждения, используйте -ddump-simpl вместе с опцией -dsuppress-all. Вывод Core должен быть намного более читабельным.

8 голосов
/ 26 мая 2011

Хотя это и не совсем основной язык GHC, как упоминает Дон, язык STG очень похож. Недавно я прошел через проверку безопасности типов STG language + machine, а потом обнаружил, что могу легко понять Core.

Текст, который я использовал для изучения STG, вполне доступен: Внедрение ленивых функциональных языков на стандартном оборудовании: G-машина Spineless Tagless G Саймона Пейтона-Джонса. Большая часть статьи посвящена деталям реализации, но я рекомендую раздел 4, в частности, в качестве пояснительного объяснения языка STG, который дает мотивы для некоторых нелогичных проектных решений и обеспечивает переводы знакомых примеров, таких как map.

3 голосов
/ 25 мая 2011

«Внешнее представление для основного языка GHC» - это документ, который можно найти при установке ghc (share/doc/ghc/core.pdf) или в Интернете .

...