Ядро является промежуточным языком GHC. Чтение Core может помочь вам лучше понять производительность вашей программы. Кто-то попросил у меня документацию или учебные пособия по чтению Core, но я не мог найти много.
Какая документация доступна для чтения GHC Core?
Вот что я нашел до сих пор:
Ответы:
GHC Core - это язык System FC, на который переведен весь Haskell. (Приблизительная) грамматика для ядра определяется как:
Ядро тесно связано с более простой и более известной системы F . Все преобразования, которые GHC выполняет на уровне ядра, являются рефакторингами с сохранением типов этого представления ядра для повышения производительности. И, не очень хорошо известно, вы можете писать прямо в Core для программы GHC.
GHC Core вписывается в конвейер компилятора (как это было в 2002 году, sans-LLVM и CMM):
Основные документы, которые необходимо знать о GHC Core:
Связанный материал, который может помочь пониманию:
Ядро в свою очередь переводится в код STG, который выглядит примерно так:
Смешные имена в Core закодированы в «Z-кодировке»:
Типы и виды сердечника GHC (из статьи Толмача):
Наконец, праймеры GHC регулярно появляются в выводе GHC Core, когда вы оптимизировали свой Haskell до основных инструкций, о которых GHC знает. Набор примопов дается как набор основных функций в предварительно обработанном файле.
источник
Совет: если вас не интересуют аннотации типов и принуждения, используйте их
-ddump-simpl
вместе с-dsuppress-all
опцией. Вывод Core должен быть намного более читабельным.источник
-dsuppress-all
действительно полезно. Вы также можете использовать,-dsuppress-coercions
если хотите избавиться только от приведений (полезно, когда вокруг много новых типов).Хотя это и не совсем основной язык GHC, как упоминает Дон, язык STG очень похож. Недавно я прошел через проверку безопасности типов STG language + machine, а потом обнаружил, что могу легко понять Core.
Текст, который я использовал для изучения STG, вполне доступен: Внедрение Ленивых Функциональных Языков на Стандартном Оборудовании: G-машина Spineless Tagless от Simon Peyton-Jones. Большая часть статьи посвящена деталям реализации, но я рекомендую раздел 4, в частности, в качестве пояснительного объяснения языка STG, который дает мотивы для некоторых нелогичных проектных решений и обеспечивает переводы знакомых примеров, таких как
map
.источник
«Внешнее представление для основного языка GHC» - это документ, который можно найти при установке ghc (
share/doc/ghc/core.pdf
) или в Интернете .источник