Ответ 1
GHC Core - это System FC, на который переводится весь Haskell. (Приблизительная) грамматика для Core определяется следующим образом:
Core тесно связан с более простой и более известной системой F. Все преобразования которые GHC делает на уровне Core, являются рефакторингами, поддерживающими сохранение этого представления Core, для повышения производительности. И, не так хорошо известно, вы можете напрямую писать в Core для программирования GHC.
Ядро GHC подходит в конвейере компилятора (как это было в 2002 году, sans-LLVM и CMM):
Основными документами для изучения ядра GHC являются:
- Внешнее представление для основного языка GHC, Tolmach, 2001
- ghc/compiler/CoreSyn, само определение GHC
- Секреты Glasgow Haskell Compiler inliner, Пейтон Джонс и Марлоу, 1999. Ядро описано в разделе 2.3, включая подробную информацию об аннотациях анализа возникновения.
- Оптимизатор, основанный на трансформации для Haskell, Пейтон Джонс и Сантос, 1998. Ядро описано в S3, включая обсуждение полиморфизма и оперативных показаний Core.
Связанный материал, который может помочь понять:
- GHC -fext-core output
- Я потратил много времени на изучение Core, прочитав источник GHC. Некоторые из них описаны в моей тезисе бакалавра с 2002 года, со страницы 16.
- Используя инструмент ghc-core, чтобы генерировать Core в формате, который мне нравится.
Core в свою очередь преобразуется в код STG, который выглядит примерно так:
Смешные имена в Core кодируются в "Z-кодировке":
Типы и виды ядра GHC (из бумаги Толмаха):
Наконец, GHC primops регулярно появляется в выпуске GHC Core, когда вы оптимизировали свой Haskell до базовых инструкций, о которых знает GHC. Набор примитивов задается как набор основных функций в предварительно обработанном файле.