Чтение ядра ГХК


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

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

вот что я нашел:

4 174

4 ответа:

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

enter image description here

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

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

enter image description here

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

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

  • The GHC - выход fext-core
  • я потратил много времени на изучение ядра, читая источник GHC. Некоторые из них описаны в моем диплом С 2002 года, со страницы 16.
  • С помощью ghc-core инструмент, чтобы создать ядро в формате, который я нахожу приятным.

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

enter image description here

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

enter image description here

типы и виды сердечника GHC (от бумаги Tolmach):

enter image description here

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

совет: Если вы не заботитесь о аннотации типа и принуждения использовать -ddump-simpl вместе с . Основной вывод должен быть гораздо более читаемым.

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

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

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