Haskell

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:
    • патч для GHC, добавляющий генератор кода для LLVM, в настоящее время включён в компилятор GHC; использование LLVM позволяет достичь большей производительности на ряде задач.
    • альтернативный кодогенератор в UHT (работоспособен частично)
  • виртуальная машина Java (JVM):
    • LambdaVM — патч для GHC, добавляющий генератор байт-кода JVM
    • jvm-bridge — мост между Haskell и JVM (для GHC)
    • jaskell — генератор байт-кода JVM (вероятно заброшен)
    • альтернативный кодогенератор в UHC (работоспособен почти полностью)
  • 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, но эти разработки пока ещё экспериментальны. Также существуют реализации подмножеств языка на разных целевых платформах.

Обсуждение закрыто.