Читання GHC Core


193

Основна мова є проміжною мовою GHC. Читання Core може допомогти вам краще зрозуміти продуктивність вашої програми. Хтось запитав мене щодо документації чи навчальних посібників з читання Core, але я не зміг знайти багато чого.

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

Ось що я знайшов поки що:



Відповіді:


272

GHC Core - це система FC FC, на яку перекладається весь Haskell. (Приблизна) граматика для Core задається:

введіть тут опис зображення

Ядро тісно пов'язане з більш простий і більш відомої системи F . Всі перетворення, які GHC робить на рівні Core , - це збереження типу рефактори для цього представлення Core для підвищення продуктивності. І, не так добре відомо, ви можете писати безпосередньо в Core для програмування GHC.

GHC Core вписується в конвеєр компілятора (як це було у 2002 році, sans-LLVM та CMM):

введіть тут опис зображення

Основними документами, які можна дізнатися про GHC Core, є:

Пов’язаний матеріал, який може допомогти зрозуміти:

  • Вихід GHC -fext сердечником
  • Я витратив багато часу на вивчення Core, читаючи джерело GHC. Деякі з них описані в моїй дипломній роботі від 2002 року, зі сторінки 16.
  • З використанням інструменту ghc-core , для створення Core у форматі, який мені здається приємним.

Core, в свою чергу, перекладається в STG-код, який виглядає приблизно так:

введіть тут опис зображення

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

введіть тут опис зображення

Види та види GHC Core (з статті Толмаха):

введіть тут опис зображення

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


61
Кожна відповідь, яку ви даєте, завжди смішно завершена. Проведіть ще одне голосування і продовжуйте це; Я схиляюся купи.
Роберт Массайолі

3
Кількість документації CC-wiki, яку Дон та загальна спільнота Haskell випустили через SO, приголомшливі. Слідкуйте за хорошими Q та A, всі!
Ден Бертон

4
Я знаю, що це згадується, але я думаю, що у відповіді слід підкреслити корисність ghc-core .
Микита Волков

24

Порада. Якщо анотації та типи примусів не хвилюються, використовуйте -ddump-simplразом із цим -dsuppress-allпараметром. Вихід Core повинен бути набагато читабельнішим.


5
-dsuppress-allдійсно корисний. Ви також можете використовувати, -dsuppress-coercionsякщо ви хочете позбутися від кастингу (корисно, коли навколо є багато нових типів).
tibbe

8

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

Текст, який я використовував для вивчення STG, є досить доступним: реалізація лінивих функціональних мов на фондовому обладнанні: безшпиндельна беззвучна G-машина Саймона Пейтона-Джонса. Значна частина статті стосується детальних відомостей про впровадження, але я рекомендую, зокрема, розділ 4, як пояснення зверху донизу мови STG, що дає мотивацію для деяких контр-інтуїтивних дизайнерських рішень та надає переклади знайомих прикладів map.


STG набагато нижчий рівень, ніж Core. Компіляційний конвеєр: Haskell -> Core -> STG -> C-- -> Machine Code
Akangka

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.