Хаскель (язык программирования)


Haskell ( / ˈhæskəl / [ 27 ] )универсальный , статически типизированный , чисто функциональный язык программирования с выводом типов и ленивыми вычислениями . [28] [29] Разработанный для обучения, исследований и промышленного применения, язык Haskell стал пионером в ряде функций языка программирования, таких как классы типов , которые обеспечивают перегрузку операторов , безопасную для типов . Основной реализацией Haskell является компилятор Glasgow Haskell Compiler (GHC). Он назван в честьлогик Хаскелл Карри . [1]

Семантика Haskell исторически основана на семантике языка программирования Miranda , на котором сосредоточились усилия первоначальной рабочей группы Haskell. [30] Последняя официальная спецификация языка была сделана в июле 2010 года, в то время как разработка GHC расширила Haskell за счет языковых расширений. Следующая официальная спецификация была запланирована на 2020 год . [3] 29 октября 2021 г. GHC2021 был выпущен в GHC версии 9.2.1. [31]

Haskell используется в научных кругах и промышленности. [32] [33] [34] По состоянию на май 2021 года Haskell был 28-м по популярности языком программирования по результатам поиска учебных пособий в Google [35] и составлял менее 1% активных пользователей репозитория исходного кода GitHub . [36]

После выпуска Miranda компанией Research Software Ltd. в 1985 году интерес к ленивым функциональным языкам вырос. К 1987 году существовало более дюжины нестрогих , чисто функциональных языков программирования. Миранда была наиболее широко используемой, но это было проприетарное программное обеспечение . На конференции по функциональным языкам программирования и компьютерной архитектуре (FPCA '87) в Портленде, штат Орегон , был достигнут твердый консенсус в отношении создания комитета для определения открытого стандарта для таких языков. Цель комитета состояла в том, чтобы объединить существующие функциональные языки в общий язык, который послужит основой для будущих исследований в области дизайна функциональных языков. [37]

Классы типов , обеспечивающие безопасную перегрузку операторов , были впервые предложены Филипом Уодлером и Стивеном Блоттом для стандартного ML , но впервые были реализованы в Haskell между 1987 и версией 1.0. [38] [39]

Первая версия Haskell («Haskell 1.0») была определена в 1990 году. [1] Усилия комитета привели к ряду определений языка (1.0, 1.1, 1.2, 1.3, 1.4).


Иерархия классов типов в прелюдии Haskell начиная с GHC 7.10. Включение Foldable и Traversable (с соответствующими изменениями в сигнатурах типов некоторых функций) и Applicative как промежуточного звена между Functor и Monad является отклонением от стандарта Haskell 2010.