Вопрос

Где я могу получить бумагу/док/что -то, что описывает, как на самом деле работает компилятор Haskell? Я прочитал довольно много документов GHC, но остановился после головной боли. Таким образом, что-то, что не требует доктора философии, чтобы понять это и не написано в стиле вас, будучи отключенным, будет предпочтительным. Это не проблема, если это действительно долго и занимает некоторое время, чтобы понять это.

PS: Самое интересное было бы что -то в GHC, но все в порядке.

Это было полезно?

Решение

Вы можете получить ответ от рта лошади! Саймон Пейтон Джонс (GHC Wizard) написал книгу, объясняющую, как реализовать языки функционального программирования. Он доступен бесплатно в Интернете, так как теперь он не в печати: http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/

Конечно, GHC продолжил с тех пор, как книга была написана, но она все еще очень актуальна.

Другие советы

Вы ищете подробности о компиляции ленивой оценки? Есть книга Саймона Пейтона-Джонса, упомянутая Максом Болингброком, также книга «Детализация Чистота»-онлайн:

http://wiki.clean.cs.ru.nl/functional_programming_and_parallel_graph_rewriting

Если у вас есть университетская принадлежность и хотите что -то меньше, вы можете попытаться получить эти книги (Хендерсон и Диллер, безусловно, не в печати):

Антони Диллер «Языки функции компиляции» ISBN 0 471 92027 4

Питер Хендерсон "Приложение и реализация функционального программирования" ISBN 0-13-331579-7

AJT Davie "Введение в функциональные системы программирования с использованием Haskell" ISBN 0 521 27724 8

Диллер имеет полный компилятор для ленивого языка (реализован в Паскале) через сокращение комбинатора. Это была техника реализации, изобретенная Дэвидом Тернером для SASL. У Хендерсона есть много частей компилятора для Lispkit, миниатюрного, ленивого варианта LISP. Дэви подробно рассказывает о машине для составления ленивого языка, например, есть описание STG, что намного короче, чем книга Саймона Пейтона-Джонса (STG-это Abstract Machine SPJ, используемый для Haskell).

Чистые разработчики имеют немалую информацию об реализации SAPL (простой приемной язык), если вы просматриваете их список публикаций:

https://clean.cs.ru.nl/publications

Наконец, существует множество документов, документирующих аспекты компилятора Utrecht Haskell UHC (и EHC). Я думаю, что большая часть информации заключается в том, как организован компилятор (с грамматикой атрибутов и «перетасовки») и как реализованы типовые системы (существуют различные уровни системы типа в EHC), а не то, как «компиляция» со стороны работает.

К сожалению, я подозреваю, что то, что вы ищете, не существует. Теория компилятора и формальная теория языка являются достаточно сложными темами в информатике, и Хаскелл ни в коем случае не является отправной точкой.

Во -первых, вы, вероятно, должны получить хорошее заземление:

Я подозреваю, что все, что объясняет что -либо о внутренних органах Хаскелла, потребует значительно лучшего понимания вышеупомянутых тем, чем скажем, C.

До сих пор я прошел один курс по этому вопросу, поэтому у меня нет официальной литературы, но я уверен, что существует много хороших источников.

Компиляторы являются огромным предметом, и здесь было бы невозможно полностью объяснить их. Но вот обзор для общего компилятора. Надеемся, что это даст вам некоторое понимание, которое может облегчить чтение вещей о GHC немного легче понять.

Компиляторы, как правило, работают серией трансформаций в 2 частях, на переднем и заднем плане.

Первое преобразование превращает простой текст во что -то немного проще. Это само по себе обычно разделено на 2 части:

Лексический анализ или токенизация - Акт преобразования простого текста в небольшие куски (обычно операторы, идентификаторы, литералы и т. Д.).

Синтаксический анализ или анализ - превращение этих маленьких кусков в структуру дерева. (обычно AST, абстрактное синтаксическое дерево)

Следующий этап - семантический анализ. На этом этапе компилятор обычно добавляет информацию в AST (например, информацию типа) и создает таблицу символов. Это завершает фронт.

Следующее преобразование превращает AST в IR, промежуточное представление. Анкет Это обычно, в настоящее время форма SSA, одно статическое назначение.

Затем это оптимизируется посредством постоянного распространения, анализа мертвого кода, векторизации и т. Д.

Последнее преобразование - генерация кода. Преобразование ИК в машинный код. Это может быть очень сложным. Это также иногда называют снижением.

Для получения дополнительной информации я рекомендую Эта страница Википедии.

У Википедии есть хороший - читаемый - обзор внутренних органов ГС (аналогично объяснению @Dan_waterworth, но специфично для Haskell и GHC):

http://en.wikipedia.org/wiki/glasgow_haskell_compiler#architecture

Одна из лучших работ по этой теме, которую я прочитал:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top