Чтение ядра ГХК
ядро-это промежуточный язык GHC. Чтение ядра может помочь вам лучше понять производительность вашей программы. Кто-то попросил у меня документацию или учебники по чтению ядра, но я не мог найти много.
какая документация доступна для чтения ядра GHC?
вот что я нашел:
4 ответа:
ядро GHC-это система FC язык, на который переводится весь Хаскелл. (Приблизительная) грамматика для ядра задается:
ядро тесно связано с более простым и более известным Система F. Все преобразования GHC делает на уровне ядра являются сохраняющие тип рефакторинги этого основного представления, чтобы улучшить производительность. И, не так хорошо известно, вы можете писать прямо в Core to program GHC.
ядро GHC помещается в конвейер компилятора (как это было в 2002 году, sans-LLVM и CMM):
основные документы, чтобы узнать о GHC Core являются:
- внешнее представление для основного языка GHC, Толмач, 2001
- ghc / compiler / CoreSyn, само определение GHC
- секреты компилятора Глазго Хаскелл вкладышем, Пейтон Джонс и Марлоу, 1999. Ядро описано в разделе 2.3, включая подробную информацию о аннотациях анализа вхождения.
- оптимизатор на основе преобразования для Haskell, Пейтон Джонс и Сантос, 1998. Ядро описано в S3, включая обсуждение полиморфизма и рабочих показаний ядра.
связанный материал, который может помочь пониманию:
- The GHC - выход fext-core
- я потратил много времени на изучение ядра, читая источник GHC. Некоторые из них описаны в моем диплом С 2002 года, со страницы 16.
- С помощью ghc-core инструмент, чтобы создать ядро в формате, который я нахожу приятным.
ядро в свою очередь переводится в StG код, который выглядит примерно так:
смешные имена в ядре закодированы в "Z-кодировка":
типы и виды сердечника GHC (от бумаги Tolmach):
наконец, с 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
) или в интернете.