~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 3BE45FA38F453B89902389EC2588C897__1710272040 ✰
Заголовок документа оригинал.:
✰ Glasgow Haskell Compiler - Wikipedia ✰
Заголовок документа перевод.:
✰ Компилятор Haskell Глазго — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/3b/97/3be45fa38f453b89902389ec2588c897.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/3b/97/3be45fa38f453b89902389ec2588c897__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:38:07 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 12 March 2024, at 22:34 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Компилятор Haskell Глазго — Википедия Jump to content

Глазго Хаскелл-компилятор

Из Википедии, бесплатной энциклопедии

Компилятор Haskell Глазго
Оригинальный автор(ы) Кевин Хэммонд
Разработчики) Саймон Марлоу , Саймон Пейтон Джонс , команда Glasgow Haskell [1]
Начальная версия декабрь 1992 г .; 31 год назад ( 1992-12 ) [2]
Стабильная версия
9.8.1  Отредактируйте это в Викиданных/ 9 октября 2023 г .; 8 месяцев назад ( 9 октября 2023 г. ) [3]
Репозиторий
Написано в Хаскелл , С
Операционная система Linux , OS X 10.7 Lion и новее, Windows 2000 и новее, FreeBSD
Платформа х86 , х86-64 , ARM
Доступно в Английский
Тип Компилятор
Лицензия БСД Новый
Веб-сайт www .haskell .org /ghc

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

История [ править ]

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

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

Имена GHC [ править ]

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

Архитектура [ править ]

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

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

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

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

Язык [ править ]

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

Расширения Haskell [ править ]

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

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

  • Распакованные типы и операции. Они представляют примитивные типы данных базового оборудования без косвенного указателя на кучу или возможности отложенной оценки. Код с интенсивным числом вычислений может работать значительно быстрее при кодировании с использованием этих типов.
  • Возможность указать строгую оценку для поля значения, привязки шаблона или типа данных.
  • Более удобный синтаксис для работы с модулями, шаблонами, списками , операторами, записями и кортежами.
  • Синтаксический сахар для вычислений со стрелками и рекурсивно определяемыми монадическими значениями. Обе эти концепции расширяют монадическую do -нотация, предусмотренная в стандартном Haskell.
  • Значительно более мощная система типов и классов типов, описанная ниже.
  • Шаблон Haskell — система метапрограммирования во время компиляции . Выражения могут быть написаны для создания кода Haskell в форме абстрактного синтаксического дерева . Эти выражения проверяются по типам и оцениваются во время компиляции; сгенерированный код затем включается, как если бы он был частью исходного кода. Вместе с возможностью размышлять над определениями это обеспечивает мощный инструмент для дальнейшего расширения языка.
  • Квази-цитата, которая позволяет пользователю определять новый конкретный синтаксис для выражений и шаблонов. Квазицитирование полезно, когда метапрограмма, написанная на Haskell, манипулирует кодом, написанным на языке, отличном от Haskell.
  • Общие классы типов, которые определяют функции исключительно с точки зрения алгебраической структуры типов, с которыми они работают.
  • Параллельная оценка выражений с использованием нескольких ядер ЦП. Это не требует явного создания потоков. Распределение работы происходит неявно, на основе аннотаций, предусмотренных в программе.
  • компилятора Прагмы для управления оптимизацией, такой как встроенное расширение и специализация функций для определенных типов.
  • Настраиваемые правила перезаписи — это правила, описывающие, как заменить одно выражение эквивалентным, но более эффективно вычисляемым выражением. Они используются в базовых библиотеках структур данных для повышения производительности кода уровня приложения. [19]
  • Запишите синтаксис точки. Предоставляет синтаксический сахар для доступа к полям (потенциально вложенной) записи, который аналогичен синтаксису многих других языков программирования. [20]

Введите системные расширения [ править ]

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

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

  • Произвольный ранг и непредикативный полиморфизм . По сути, полиморфная функция или конструктор типа данных могут потребовать, чтобы один из ее аргументов сам был полиморфным.
  • Обобщенные алгебраические типы данных . Каждый конструктор полиморфного типа данных может кодировать информацию в результирующий тип. Функция, которая выполняет сопоставление с шаблоном этого типа, может использовать информацию о типе каждого конструктора для выполнения более конкретных операций с данными.
  • Экзистенциальные типы . Их можно использовать для «объединения» некоторых данных вместе с операциями над этими данными таким образом, чтобы операции можно было использовать без раскрытия конкретного типа базовых данных. Такое значение очень похоже на объект , встречающийся в объектно-ориентированных языках программирования.
  • Типы данных, которые фактически не содержат никаких значений. на уровне типа Они могут быть полезны для представления данных в метапрограммировании .
  • Семейства типов : определяемые пользователем функции от типов к типам. В то время как параметрический полиморфизм обеспечивает одну и ту же структуру для каждого экземпляра типа, семейства типов предоставляют специальный полиморфизм с реализациями, которые могут различаться между экземплярами. Варианты использования включают оптимизацию контейнеров с учетом содержимого и метапрограммирование на уровне типов.
  • Параметры неявной функции, имеющие динамическую область действия . Они представлены в типах почти так же, как ограничения класса типа.
  • Линейные типы (GHC 9.0)

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

  • Класс типа может быть параметризован более чем для одного типа. Таким образом, класс типов может описывать не только набор типов, но и n -арное отношение к типам.
  • Функциональные зависимости , которые ограничивают части этого отношения математической функцией типов. То есть ограничение указывает, что некоторый параметр класса типа полностью определяется после фиксирования некоторого другого набора параметров. Это направляет процесс вывода типа в ситуациях, когда в противном случае возникла бы неоднозначность.
  • Значительно смягчены правила, касающиеся допустимой формы экземпляров классов типов. Когда они включены полностью, система классов типов становится полным по Тьюрингу языком для логического программирования во время компиляции.
  • Семейства типов, как описано выше, также могут быть связаны с классом типов.
  • Автоматическое создание экземпляров классов определенных типов расширяется несколькими способами. новые классы типов для общего программирования Поддерживаются и общие шаблоны рекурсии. Кроме того, когда новый тип объявлен как изоморфный существующему типу, любой экземпляр класса типа, объявленный для базового типа, может быть преобразован в новый тип «бесплатно».

Портативность [ править ]

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

См. также [ править ]

Ссылки [ править ]

  1. ^ Перейти обратно: а б «Команда GHC» . Хаскелл.орг . Проверено 1 сентября 2016 г.
  2. ^ Перейти обратно: а б с Худак П.; Хьюз, Дж.; Пейтон Джонс, С .; Уодлер, П. (июнь 2007 г.). «История Haskell: лень с классами» (PDF) . Процедуры Третьей конференции ACM SIGPLAN History of Programming Languages ​​(HOPL-III) . Проверено 1 сентября 2016 г.
  3. ^ «Загрузить – Компилятор Glasgow Haskell» . Хаскелл.орг .
  4. ^ «Руководство пользователя системы компиляции Glorious Glasgow Haskell» . Хаскелл.орг . Проверено 27 июля 2014 г.
  5. ^ «Результаты опроса о состоянии Haskell за 2017 год» . taylor.fausak.me . 15 ноября 2017 года . Проверено 11 декабря 2017 г.
  6. ^ «Промышленная группа Хаскелл» . Хаскелл.орг . 2014 . Проверено 1 сентября 2016 г.
  7. ^ «GHC Компилятор Haskell Глазго» . Хаскелл.орг . Проверено 14 января 2022 г.
  8. ^ «Репозиторий: configure.ac» . gitlab.haskell.org . 12 января 2022 г. Проверено 14 января 2022 г.
  9. ^ «Руководство пользователя системы компиляции Haskell Glorious Glasgow, версия 7.6.3» . downloads.haskell.org . Проверено 14 января 2022 г.
  10. ^ «ghc-0.29-src.tar.gz» ( tar gzip ) . downloads.haskell.org . Файл: ghc-0.29/ghc/PATCHLEVEL . Проверено 14 января 2022 г.
  11. ^ «Комментарий GHC: Составитель» . Хаскелл.орг . 23 марта 2016 г. Архивировано из оригинала 23 марта 2016 г. . Проверено 26 мая 2016 г.
  12. ^ Перейти обратно: а б Зульцманн, М.; Чакраварти, ММТ; Пейтон Джонс, С .; Доннелли, К. (январь 2007 г.). «Система F с приведением равенства типов» . Процедуры семинара ACM по типам в языковом проектировании и реализации (TLDI) .
  13. ^ Пейтон Джонс, С. (апрель 1996 г.). «Компиляция Haskell путем преобразования программы: отчет с окопов» . Процедуры Европейского симпозиума по программированию (ESOP) .
  14. ^ Пейтон Джонс, С. (апрель 1992 г.). «Реализация ленивых функциональных языков на стандартном оборудовании: G-машина Spineless Tagless, версия 2.5» . Журнал функционального программирования . 2 (2): 127–202. дои : 10.1017/S0956796800000319 .
  15. ^ «Язык Haskell 98 и библиотеки: пересмотренный отчет» . Хаскелл.орг . Проверено 28 января 2007 г.
  16. ^ «Отчет о языке Haskell 2010» . Хаскелл.орг . Проверено 30 августа 2012 г.
  17. ^ «Добро пожаловать в Haskell (Haskell Prime)» . Хаскелл.орг . Архивировано из оригинала 20 февраля 2016 года . Проверено 26 мая 2016 г.
  18. ^ «Особенности языка GHC» . Хаскелл.орг . Архивировано из оригинала 29 июня 2016 года . Проверено 25 мая 2016 г. .
  19. ^ Куттс, Д.; Лещинский Р.; Стюарт, Д. (апрель 2007 г.). «Stream Fusion: от списков к потокам и вообще к нулю» . Процедуры Международной конференции ACM SIGPLAN по функциональному программированию (ICFP) . Архивировано из оригинала 23 сентября 2007 года.
  20. ^ Митчелл, Нил; Флетчер, Шейн (3 мая 2020 г.). «Синтаксис записи точек» . ghc-предложения . Гитхаб . Проверено 30 июня 2020 г.
  21. ^ Перейти обратно: а б Платформы на gitlab.haskell.org

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 3BE45FA38F453B89902389EC2588C897__1710272040
URL1:https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler
Заголовок, (Title) документа по адресу, URL1:
Glasgow Haskell Compiler - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)