Чтение GHC Core

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

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

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

4 ответа

Решение

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

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

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

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

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

  • Выход GHC -fext-core
  • Я потратил много времени на изучение Core, читая источник GHC. Некоторые из них описаны в моей дипломной диссертации 2002 года, со страницы 16.
  • Использование инструмента ghc-core для генерации Core в формате, который мне нравится.

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

Смешные имена в Core закодированы в "Z-кодировке":

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

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

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

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

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

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

Другие вопросы по тегам