Haskell – это чистый функциональный язык программирования, который был разработан в начале 90-х годов. Он основан на лямбда-исчислении и предназначен для написания высокоуровневых, чистых и безопасных программ. В Haskell отсутствуют побочные эффекты, такие как изменение состояния переменных, что делает программы на нем более предсказуемыми и проще в поддержке. Язык Haskell также поддерживает ленивые вычисления, что позволяет эффективно работать с бесконечными структурами данных. Он использует статическую типизацию, которая позволяет выявлять ошибки на этапе компиляции. Haskell широко используется для академических и исследовательских целей, а также в коммерческой разработке программного обеспечения.
Система типов — полная, сильная, статическая, с автоматическим выводом типов, основанная на системе типов Хиндли — Милнера. Поскольку язык функциональный, то основная управляющая структура — это функция.
Отличительная черта языка — серьёзное отношение к типизации; во многом в связи с этим язык назван в честь исследователя теории типов и изобретателя комбинаторной логики Хаскелла Карри.
Имеются средства взаимодействия с кодом на других языках программирования. Есть встроенная поддержка многозадачного и параллельного программирования, развитый инструментарий (средства автоматического тестирования, отладки и профилирования, в том числе и для параллельных программ), существует несколько тысяч библиотек с открытым исходным кодом.
Наиболее популярен на практике оптимизирующий компилятор GHC, который создаёт быстрый код и позволяет использовать многие расширения языка. GHC может оптимизировать как скорость, так и компактность программ, способен создавать многозадачный и параллелизованный код. В комплекте с компилятором GHC поставляется также интерактивная среда программирования GHCi со встроенным отладчиком. GHC работает в Windows, MacOS X и на нескольких Unix -подобных платформах (Linux, FreeBSD, Solaris). Именно GHC является стандартным компилятором в Haskell Platform, и именно на нём в первую очередь тестируются все новые библиотеки.
Другая популярная реализация языка — интерпретатор HUGS. Он написан на Си, имеет малый размер дистрибутива и работает практически на всех платформах. HUGS предоставляет интерактивную среду программирования, но может также запускать программы на Haskell в стиле скриптовых языков. Пользователи Windows могут использовать графическую интерактивную среду WinHugs. Поскольку HUGS — это интерпретатор, то программы, запущенные в нём, выполняются медленнее, чем код, созданный большинством компиляторов языка Haskell. HUGS часто рекомендуют в качестве среды для изучения языка. HUGS полностью поддерживает стандарт языка Haskell 98, а также некоторые наиболее популярные расширения языка.
Другие известные реализации:
- nhc98 — быстрый компилятор, поддерживающий стандарт Haskell 98, написанный на Haskell 98; доступен для всех юникс-подобных платформ, включая MacOS X и Windows/cygwin;
- YHC (York Haskell Compiler) — форк nhc98, ставящий целью быть более переносимым и эффективным, поддерживает отладчик Hat; генерирует промежуточный байт-код, который можно использовать для генерации кода на других языках программирования;
- UHC (Utrecht Haskell Compiler) — компилятор, поддерживающий Haskell 98 почти полностью, а также некоторые расширения; поддерживает глобальный анализ программ; имеет несколько кодогенераторов, в том числе почти полностью функциональный генератор JVM-кода, кодогенераторы для LLVM и CLR в состоянии разработки; работает на юникс-подобных системах (включая MacOS X и Windows/cygwin);
- HBI и HBC — интерпретатор и компилятор, поддерживающие стандарт Haskell 98 с некоторыми расширениями; точно работает в Linux, поддерживается слабо;
- LHC (The Luxurious LHC Haskell Optimization System) — альтернативный кодогенератор для GHC, поддерживающий глобальную низкоуровневую оптимизацию программы в целом;
- jhc — экспериментальный компилятор для исследования возможностей глобальной оптимизации программ;
- Yale Haskell — ранняя реализация языка Haskell на Lisp.
Большинство компиляторов языка Haskell создают непосредственно машинный код для используемой платформы, но есть несколько исключений – проектов, позволяющих производить код для виртуальных машин или генерировать код на других языках программирования. Степень зрелости и уровень поддержки подобных проектов сильно разнится.
- LLVM:
- Common Language Runtime (.Net):
- прототип генератора MSIL-код для компилятора EHT/UHT
- некоторые проекты по поддержке CLR упоминаются в GHC FAQ, на начало 2010 года их состояние не ясно
- JavaScript:
- кодогенератор JavaScript для GHC — патч для GHC, позволяющий компилировать программы в JavaScript-код
- Ycr2Js — конвертер байт-кода компилятора YHC в JavaScript
- Fay — компилятор подмножества Haskell в JavaScript
- Языки описания архитектуры (Verilog/VHDL):
- Clash — альтернативный способ разработки ASIC и программирования FPGA
Несколько интересных целевых платформ доступны при использовании компилятора YHC, в частности существуют интерпретатор байт-кода YHC на Python и конвертер байт-кода YHC в Erlang Core, но эти разработки пока ещё экспериментальны. Также существуют реализации подмножеств языка на разных целевых платформах.