Автор (ы) | Кевин Хаммонд |
---|---|
Разработчик (и) | The Glasgow Haskell Team |
Первоначальный выпуск | декабрь 1992 г. (1992-12) |
Стабильный выпуск | 8.10.2 / 8 августа 2020 г.; 2 месяца назад (2008-08-08) |
Репозиторий | |
Написано на | Haskell и C |
Операционная система | Linux, OS X 10.7 Lion и новее, iOS, Windows 2000 и новее, FreeBSD, Solaris 10 и выше |
Платформа | x86, x86-64, ARM |
Доступно в | Английский |
Тип | Компилятор |
Лицензия | Новая лицензия BSD |
Веб-сайт | www.haskell.org / ghc / |
Glasgow Haskell Compiler (GHC ) - это открытый исходный код собственный код компилятор для функциональное программирование язык Haskell. Он обеспечивает кроссплатформенную среду для написания и тестирования кода Haskell и поддерживает многочисленные расширения, библиотеки и оптимизации, которые упрощают процесс генерации и выполнения кода. GHC - наиболее часто используемый компилятор Haskell. Ведущими разработчиками являются Саймон Пейтон Джонс и Саймон Марлоу.
GHC первоначально был запущен в 1989 году как прототип, написанный на LML ( Lazy ML) Кевина Хаммонда из Университета Глазго. Позже в том же году прототип был полностью переписан на Haskell, за исключением его парсера , Корделия Холл, Уилл Партейн и Саймон Пейтон Джонс. Его первая бета-версия была выпущена 1 апреля 1991 года, а в последующих выпусках был добавлен анализатор строгости , а также языковые расширения, такие как монадический ввод-вывод, изменяемые массивы, распакованные типы данных, параллельные и параллельные модели программирования (такие как программная транзакционная память и параллелизм данных ) и профилировщик.
Пейтон Джонс, а также Марлоу, позже перемещенные в Microsoft Research в Кембридже, Англия, где они продолжали нести основную ответственность за разработку GHC. GHC также содержит код от более чем трехсот других участников. С 2009 года участие третьих сторон в GHC финансируется Industrial Haskell Group.
Сам GHC написан на Haskell, но среда выполнения Система для Haskell, необходимая для запуска программ, написана на C и C -.
интерфейс GHC - включая лексер , синтаксический анализатор и typechecker - предназначены для сохранения максимально возможного количества информации об исходном языке до тех пор, пока не будет завершен вывод типа , с целью предоставления пользователям четких сообщений об ошибках. После проверки типа код Haskell обезгаживается на типизированный промежуточный язык, известный как «Core» (на основе System F, расширенный с помощью let
и case
выражения). Недавно Core был расширен для поддержки обобщенных алгебраических типов данных в его системе типов, и теперь он основан на расширении системы F, известном как System F C.
в традициях типа - направленная компиляция, упрощатель GHC, или "средний конец", где выполняется большая часть оптимизации, реализованных в GHC, структурирована как серия преобразований источник-источник по основному коду. Анализ и преобразования, выполняемые на этом этапе компиляции, включают анализ спроса (обобщение анализа строгости ), применение определенных пользователем правил перезаписи (включая набор правил, включенных в стандартные библиотеки GHC. который выполняет foldr / build fusion ), разворачивание (называемое «inlining » в более традиционных компиляторах), анализ, который определяет, какие аргументы функции могут быть распакованы, анализ результатов построенного продукта, специализация перегруженных функций, а также набор более простых локальных преобразований, таких как сворачивание констант и уменьшение бета.
внутренняя часть компилятора преобразует код ядра во внутреннее представление C-- через промежуточный язык STG (сокращение от «Spineless Tagless G-machine»). Затем код C-- может идти по одному из трех путей: он либо печатается как код C для компиляции с GCC, либо конвертируется непосредственно в машинный код (традиционное «генерация кода » phase) или преобразовать в код виртуальной машины LLVM для компиляции с LLVM. Во всех трех случаях результирующий собственный код, наконец, связывается с системой времени выполнения GHC для создания исполняемого файла.
GHC соответствует языковым стандартам, как Haskell 98, так и Haskell 2010. Он также поддерживает множество дополнительных расширений стандарта Haskell: например, программную транзакционную память (STM), позволяющая выполнять транзакции составной памяти.
Было предложено несколько расширений Haskell. Эти расширения предоставляют функции, не описанные в спецификации языка, или переопределяют существующие конструкции. Таким образом, каждое расширение может поддерживаться не всеми реализациями Haskell. Постоянно прилагаются усилия для описания расширений и выбора тех, которые будут включены в будущие версии спецификации языка.
Расширения, поддерживаемые компилятором Glasgow Haskell, включают:
Система выразительных статических типов - это одна из основных определяющих особенностей Haskell. Соответственно, большая часть работы по расширению языка была направлена на типы и классы типов.
Компилятор Glasgow Haskell поддерживает расширенную систему типов, основанную на теоретической Системе F C. Основные расширения системы типов включают:
Расширения, относящиеся к классам типов, включают:
Версии GHC доступны для нескольких платформ, включая Windows и большинство разновидностей Unix (например, Linux, FreeBSD, OpenBSD и macOS ). GHC также был перенесен на несколько различных архитектур процессоров.