Это руководство по использованию Glasgow Haskell Compiler (GHC): интерактивной системы и системы пакетной компиляции для языка Haskell 2010.
GHC состоит из двух основных компонентов: интерактивного интерпретатора Haskell (также известного как GHCi), описанного в разделе Использование GHCi, и пакетного компилятора, описанного в разделе Использование GHC. Фактически GHC — это одна программа, которую запускают с разными параметрами, чтобы использовать интерактивную систему или систему пакетной компиляции.
Пакетный компилятор можно использовать вместе с GHCi: скомпилированные модули можно загружать в интерактивный сеанс и использовать так же, как интерпретируемый код. Более того, при работе с GHCi большая часть кода библиотек уже скомпилирована. Это позволяет получить лучшее из обоих миров: быстрый предварительно скомпилированный код библиотек и быструю повторную компиляцию тех частей программы, которые находятся в активной разработке.
GHC поддерживает множество расширений языка, включая параллелизм, интерфейс вызова функций на других языках, исключения и расширения системы типов, такие как классы типов с несколькими параметрами, локальная универсальная и экзистенциальная квантификация, функциональные зависимости, ограниченные областью видимости переменные типов и явно неупакованные типы. Все они описаны в разделе Расширения языка.
В GHC есть полноценный оптимизатор, поэтому, если вы захотите по-настоящему взяться за дело (и у вас будет свободное время), GHC сможет сгенерировать довольно быстрый код. Кроме того, по умолчанию компиляция выполняется как можно быстрее, без чрезмерных усилий по оптимизации сгенерированного кода (хотя GHC вряд ли можно назвать быстрым компилятором :-).
Система профилирования GHC поддерживает «стеки центров затрат»: способ представления профиля программы на Haskell в виде структуры, похожей на граф вызовов. Подробнее см. в разделе Профилирование.
В комплект GHC входит ряд библиотек. Они описаны в отдельной документации.
1.1. Получение GHC
Перейдите на домашнюю страницу GHC и нажмите ссылку «download», чтобы скачать GHC для своей платформы.
Если вы хотите собрать GHC самостоятельно, перейдите к руководству по сборке GHC, чтобы узнать, как получить исходный код и собрать его в своей системе. Обратите внимание: сам GHC написан на Haskell, поэтому для его сборки вам всё равно потребуется установить GHC.
1.2. Общая информация: веб-сайты, списки рассылки и т. д.
В Интернете есть несколько ссылок, которые могут вас заинтересовать:
- Домашняя страница GHC
- Страница разработчиков GHC (документация для разработчиков, вики и система отслеживания ошибок)
Мы ведём следующие списки рассылки, посвящённые GHC. Приглашаем вас подписаться на те из них, которые вам подходят.
-
glasgow-haskell-users -
Этот список предназначен для общения пользователей GHC. Если у вас есть конкретный вопрос о GHC, сначала загляните в раздел часто задаваемых вопросов.
Подписчики могут отправлять сообщения в список по адресу glasgow-haskell-users@haskell.org. Дополнительная информация доступна на странице Mailman.
-
ghc-devs -
Здесь общаются разработчики GHC. Если вы работаете с API GHC или у вас есть вопрос о реализации GHC, присоединяйтесь к обсуждению.
Подписчики могут отправлять сообщения в список по адресу ghc-devs@haskell.org. Дополнительная информация доступна на странице Mailman.
Сервис www.haskell.org обслуживает и другие списки рассылки, связанные с Haskell и GHC. Полный список см. на странице https://www.haskell.org/mailman/listinfo/.
1.3. Сообщение об ошибках в GHC
Glasgow Haskell — развивающаяся система, поэтому в ней неизбежно встречаются ошибки. Если вы обнаружили ошибку, ознакомьтесь с информацией о том, как сообщить о ней, на этой странице вики.
1.4. Правила нумерации версий GHC
Начиная с версии GHC 6.8, мы используем следующие правила нумерации версий GHC:
Стабильные ветки имеют номера x.y, где ⟨y⟩ — чётное число. Выпуски стабильной ветки x.y имеют номера x.y.z, где ⟨z⟩ (>= 1) — номер уровня исправлений. Выпуски уровней исправлений содержат только исправления ошибок и никогда не меняют программный интерфейс системного кода. Однако, если вы установите новый уровень исправлений поверх старого, потребуется перекомпилировать весь код, собранный со старыми библиотеками.
Значение __GLASGOW_HASKELL__ (см. раздел Параметры, влияющие на препроцессор C) для основного выпуска x.y.z — это целое число ⟨xyy⟩ (если ⟨y⟩ состоит из одной цифры, перед ней добавляется ноль; например, для версии GHC 6.8.2 значение было бы __GLASGOW_HASKELL__==608).
Мы можем предоставлять для скачивания снимки текущей стабильной ветки, а последние исходные коды доступны в репозиториях git.
Стабильные снимки называются x.y.z.YYYYMMDD. где YYYYMMDD — дата исходного кода, на основе которого создан снимок, а x.y.z+1 — следующий выпуск этой ветки. Например, 6.8.1.20040225 был бы снимком ветки 6.8 в ходе разработки 6.8.2.
Нестабильные снимки называются x.y.YYYYMMDD. где YYYYMMDD — дата исходного кода, на основе которого создан снимок. Например, 6.7.20040225 был бы снимком HEAD до создания ветки 6.8.
Значение __GLASGOW_HASKELL__ для снимка — это целое число ⟨xyy⟩. Однако никогда не следует писать условный код, проверяющий это значение: поскольку интерфейсы меняются ежедневно, а значения __GLASGOW_HASKELL__ не позволяют задать более точную версию, для условной компиляции следует использовать только предикаты, проверяющие, равно ли __GLASGOW_HASKELL__ заданному основному выпуску, является ли оно более поздним или более ранним.
Номер версии установленной у вас копии GHC можно узнать, запустив ghc с флагом --version (см. раздел Параметры подробности вывода).
Версию компилятора можно проверить в скомпилированном коде с помощью макроса CPP MIN_VERSION_GLASGOW_HASKELL (определяется только при использовании CPP). Подробнее см. в разделе Стандартные макросы CPP.
1.5. Лицензия Glasgow Haskell Compiler
Авторские права 2002–2007, Совет университета Глазго. Все права защищены.
Распространение и использование в исходной и двоичной формах, с изменениями или без них, разрешены при соблюдении следующих условий:
- При распространении исходного кода необходимо сохранить приведённое выше уведомление об авторских правах, этот список условий и приведённый ниже отказ от ответственности.
- При распространении в двоичной форме необходимо воспроизвести приведённое выше уведомление об авторских правах, этот список условий и приведённый ниже отказ от ответственности в документации и/или других материалах, поставляемых с дистрибутивом.
- Ни название университета, ни имена его участников нельзя использовать для одобрения или продвижения продуктов, созданных на основе этого программного обеспечения, без предварительного письменного разрешения.
ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ СОВЕТОМ УНИВЕРСИТЕТА ГЛАЗГО И ЕГО УЧАСТНИКАМИ «КАК ЕСТЬ». ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НЕ ПРЕДОСТАВЛЯЮТСЯ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ СОВЕТ УНИВЕРСИТЕТА ГЛАЗГО ИЛИ ЕГО УЧАСТНИКИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СЛУЧАЙНЫЙ, ОСОБЫЙ, ШТРАФНОЙ УЩЕРБ ИЛИ УЩЕРБ, ВЫЗВАННЫЙ ПОСЛЕДСТВИЯМИ (ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ПРИОБРЕТЕНИЕ ЗАМЕНЯЮЩИХ ТОВАРОВ ИЛИ УСЛУГ, ПОТЕРЮ ВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ, А ТАКЖЕ ПЕРЕРЫВ В ДЕЯТЕЛЬНОСТИ), НЕЗАВИСИМО ОТ ПРИЧИНЫ ИЛИ ПРИНЦИПА ОТВЕТСТВЕННОСТИ — ДОГОВОРНОГО, ОБЪЕКТИВНОГО ИЛИ ДЕЛИКТНОГО (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ И ИНОЕ), — ВОЗНИКШИЙ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА БЫЛО СООБЩЕНО.