stringtranslate.com

Компилятор Глазго Haskell

Glasgow Haskell Compiler ( GHC ) — это собственный или машинный компилятор кода для функционального языка программирования Haskell . [5] Он предоставляет кроссплатформенную программную среду для написания и тестирования кода Haskell и поддерживает множество расширений, библиотек и оптимизаций, которые упрощают процесс генерации и выполнения кода. GHC — наиболее часто используемый компилятор Haskell. [6] Это бесплатное программное обеспечение с открытым исходным кодом , выпущенное под лицензией BSD .

История

GHC изначально был начат в 1989 году как прототип, написанный на Lazy ML (LML) Кевином Хаммондом в Университете Глазго . Позже в том же году прототип был полностью переписан на Haskell, за исключением его парсера , Корделией Холл, Уиллом Партейном и Саймоном Пейтоном Джонсом. Его первый бета-релиз состоялся 1 апреля 1991 года. Более поздние выпуски добавили анализатор строгости и расширения языка, такие как монадический ввод-вывод , изменяемые массивы, неупакованные типы данных, параллельные и параллельные модели программирования (такие как программная транзакционная память и параллелизм данных ) и профилировщик . [2]

Пейтон Джонс и Марлоу позже перешли в Microsoft Research в Кембридже , где они продолжили нести основную ответственность за разработку GHC. GHC также содержит код более чем трехсот других участников. [1] С 2009 по 2014 год сторонние вклады в GHC финансировались Industrial Haskell Group. [7]

Имена GHC

С ранних выпусков официальный сайт [8] называл GHC The Glasgow Haskell Compiler , тогда как в команде исполняемой версии он идентифицировался как The Glorious Glasgow Haskell Compilation System . [9] Это было отражено в документации. [10] Первоначально он имел внутреннее название The Glamorous Glasgow Haskell Compiler . [11]

Архитектура

GHC написан на языке Haskell , [12] но система выполнения для Haskell, необходимая для запуска программ, написана на языках C и C-- .

Интерфейс GHC , включающий лексер , парсер и проверку типов , разработан для сохранения как можно большего количества информации об исходном языке до завершения вывода типов , с целью предоставления пользователям четких сообщений об ошибках. [2] После проверки типов код Haskell десахаризируется в типизированный промежуточный язык, известный как «Core» (основанный на System F , расширенный выражениями letи case). Core был расширен для поддержки обобщенных алгебраических типов данных в своей системе типов и теперь основан на расширении System F, известном как System F C . [13]

В традиции компиляции с управлением типами, упроститель GHC, или «средняя часть», где выполняется большинство оптимизаций, реализованных в GHC, структурирован как ряд преобразований исходного кода в исходный. Анализы и преобразования, выполняемые на этом этапе компиляции, включают анализ спроса (обобщение анализа строгости ), применение пользовательских правил перезаписи (включая набор правил, включенных в стандартные библиотеки GHC, которые выполняют слияние foldr/build ), разворачивание (называемое « встраиванием » в более традиционных компиляторах), let-floating, анализ, который определяет, какие аргументы функции могут быть распакованы, анализ результата сконструированного продукта , специализация перегруженных функций и набор более простых локальных преобразований, таких как сворачивание констант и бета-редукция . [14]

Бэкэнд компилятора преобразует код Core во внутреннее представление C-- через промежуточный язык STG (сокращение от "Spineless Tagless G-machine"). [15] Затем код C-- может пойти одним из трех путей: он либо печатается как код C для компиляции с GCC , либо преобразуется непосредственно в машинный код (традиционная фаза " генерации кода "), либо преобразуется в LLVM IR для компиляции с LLVM. Во всех трех случаях полученный машинный код в конечном итоге связывается с системой выполнения GHC для создания исполняемого файла.

Язык

GHC соответствует стандартам языка, как Haskell 98 [16] , так и Haskell 2010. [ 17] Он также поддерживает множество дополнительных расширений стандарта Haskell: например, библиотеку программной транзакционной памяти (STM), которая позволяет выполнять составные транзакции памяти .

Расширения для Haskell

Было предложено много расширений для Haskell. Они предоставляют возможности, не описанные в спецификации языка, или переопределяют существующие конструкции. Таким образом, каждое расширение может не поддерживаться всеми реализациями Haskell. Продолжаются усилия [18] по описанию расширений и выбору тех, которые будут включены в будущие версии спецификации языка.

Расширения [19], поддерживаемые компилятором Glasgow Haskell, включают:

Расширения системы типов

Выразительная статическая система типов является одной из основных определяющих особенностей Haskell. Соответственно, большая часть работы по расширению языка была направлена ​​на типы данных и классы типов .

Компилятор Glasgow Haskell поддерживает расширенную систему типов, основанную на теоретической системе F C. [ 13] Основные расширения системы типов включают в себя:

Расширения, относящиеся к классам типов, включают:

Портативность

Версии GHC доступны для нескольких систем или вычислительных платформ , включая Windows и большинство разновидностей Unix (таких как Linux , FreeBSD , OpenBSD и macOS ). [22] GHC также был портирован на несколько различных архитектур процессоров . [22]

Смотрите также

Ссылки

  1. ^ ab "The GHC Team". Haskell.org . Получено 1 сентября 2016 г. .
  2. ^ abc Hudak, P.; Hughes, J.; Peyton Jones, S .; Wadler, P. (июнь 2007 г.). "История Haskell: ленивые отношения с классами" (PDF) . Процедуры Третьей конференции ACM SIGPLAN по истории языков программирования (HOPL-III) . Получено 1 сентября 2016 г.
  3. ^ "Загрузить – Компилятор Glasgow Haskell". Haskell.org .
  4. ^ ab "Устаревание 32-битных платформ Darwin и Windows". Команда GHC.
  5. ^ "The Glorious Glasgow Haskell Compilation System User's Guide". Haskell.org . Получено 27 июля 2014 г. .
  6. ^ "Результаты опроса о состоянии Haskell за 2017 год". taylor.fausak.me . 15 ноября 2017 г. Получено 11 декабря 2017 г.
  7. ^ "Industrial Haskell Group". Haskell.org . 2014 . Получено 1 сентября 2016 .
  8. ^ "GHC The Glasgow Haskell Compiler". Haskell.org . Получено 14 января 2022 г. .
  9. ^ "Репозиторий: configure.ac". gitlab.haskell.org . 12 января 2022 г. . Получено 14 января 2022 г. .
  10. ^ "The Glorious Glasgow Haskell Compilation System User's Guide, Version 7.6.3". downloads.haskell.org . Получено 14 января 2022 г. .
  11. ^ "ghc-0.29-src.tar.gz" ( tar gzip ) . downloads.haskell.org . Файл: ghc-0.29/ghc/PATCHLEVEL . Получено 14 января 2022 г. .
  12. ^ "GHC Commentary: The Compiler". Haskell.org . 23 марта 2016 г. Архивировано из оригинала 23 марта 2016 г. Получено 26 мая 2016 г.
  13. ^ ab Sulzmann, M.; Chakravarty, MMT; Peyton Jones, S .; Donnelly, K. (январь 2007 г.). "Система F с приведением типов к равенству". Процедуры семинара ACM по типам в разработке и реализации языков (TLDI) .
  14. ^ Пейтон Джонс, С. (апрель 1996 г.). «Компиляция Haskell путем преобразования программ: отчет с окопов». Процедуры Европейского симпозиума по программированию (ESOP) .
  15. ^ Пейтон Джонс, С. (апрель 1992 г.). «Реализация ленивых функциональных языков на стандартном оборудовании: бесхребетная безтеговая G-машина, версия 2.5». Журнал функционального программирования . 2 (2): 127–202. doi :10.1017/S0956796800000319.
  16. ^ "Язык и библиотеки Haskell 98: пересмотренный отчет". Haskell.org . Получено 28 января 2007 г. .
  17. ^ "Haskell 2010 Language Report". Haskell.org . Получено 30 августа 2012 .
  18. ^ "Welcome to Haskell' (Haskell Prime)". Haskell.org . Архивировано из оригинала 20 февраля 2016 . Получено 26 мая 2016 .
  19. ^ "GHC Language Features". Haskell.org . Архивировано из оригинала 29 июня 2016 . Получено 25 мая 2016 .
  20. ^ Coutts, D.; Leshchinskiy, R.; Stewart, D. (апрель 2007 г.). "Stream Fusion: From Lists to Streams to Nothing at All". Процедуры Международной конференции ACM SIGPLAN по функциональному программированию (ICFP) . Архивировано из оригинала 23 сентября 2007 г.
  21. ^ Митчелл, Нил; Флетчер, Шейн (3 мая 2020 г.). «Record Dot Syntax». ghc-proposals . GitHub . Получено 30 июня 2020 г. .
  22. ^ ab Платформы на gitlab.haskell.org

Внешние ссылки