Haskell - стандартизированный ленивый функциональный язык программирования общего назначения, основанный на лямбда-исчислении. Назван в честь Хаскелля Карри, специалиста по разделу математической логики. Его идеи легли в основу функциональных языков программирования.
Рисунок 1. Карри Хаскелль. Автор24 — интернет-биржа студенческих работ
История Haskell
Предшественником Haskell можно считать язык Miranda, выпущенный в 1985 г. и давший толчок развитию ленивых языков.
Ленивыми называются языки, в которых функции вызываются по мере их востребованности.
Miranda распространялся под коммерческой лицензией, поэтому в 1987 г. на конференции по развитию функциональных языков, проходившей в Портленде, было решено разработать свободный аналог этого языка, для чего был создан специальный комитет.
Haskell 1.0 увидел свет в 1990 г. К концу 1990-х гг. язык обрел необходимую стабильность, был оснащен стандартной библиотекой, обладал некоторыми перспективными экспериментальными особенностями. Стандарт языка под названием Haskell 98 был опубликован в начале 1999 г. и дополнен в 2003 г. Вскоре появился и эталонный компилятор - Glasgow Haskell Compiler (GHC). Актуальным на сегодняшний день является стандарт Haskel от 2010 г. с некоторыми принятыми позднее дополнениями. В настоящее время, помимо GHC, используется также The Utrecht Haskell Compiler (UHC), содержащий некоторые экспериментальные расширения.
Рисунок 2. Генеалогия Haskell. Автор24 — интернет-биржа студенческих работ
Haskell повлиял на развитие многих современных языков программирования. В частности, одним из его потомков можно считать применяемый для разработки коммуникационных систем Erlang, созданный компанией Ericsson.
Специфика Haskell
К отличительным особенностям Haskell относятся:
- статическая система типов; во время компиляции выполняется проверка всех выражений на совпадение типов и, в случае нарушения, преобразование заканчивается ошибкой;
- в очевидных случаях компилятор сам обозначает типы переменных;
- ленивость; функции соединяются в цепочки по мере востребованности; повторяющиеся фрагменты кода можно именовать и вызывать с помощью сокращений;
- чистая функциональность; функции в Haskell более строго определены, чем в других языках программирования; они не могут изменять свои аргументы, внутри них не может происходить ничего, что бы влияло на внешние по отношению к ним переменные;
- параллельные вычисления; потоки, выполняющие алгоритмы одновременно в рамках одного процесса, создаются автоматически на уровне компилятора.
Как и у других современных языков программирования, у Haskell есть репозитории, из которых можно загружать библиотеки, расширяющие базовые возможности языка. Кроме того, инструментарий для разработки на Haskell оснащен собственной системой контроля версий Darcs и упаковщиком Cabal. Несмотря на некоторую экзотичность и сравнительно невысокую популярность, Haskell является языком общего применения и даже располагает собственными фреймворками для веб-разработки ( Yesod, Happstack, Snap).
Недостатки Haskell:
- ленивость затрудняет выявление причин утечек памяти;
- имеет место некоторая сложность конфигурирования программ, написанных на Haskell;
- сравнительно невелико количество пишущих на нем программистов (трудно набрать в проект достаточное количество разработчиков);
- экспериментальный и исследовательский характер Haskell (он считается флагманом среди функциональных языков программирования) обуславливает появление в нем время от времени непредсказуемых тенденций.
Программирование на Haskell
Основное понятие в Haskell — функция. Оно присутствует в описании большинства языков программирования, но в Haskell стремление выражать все сущности и процессы в виде функций возведено в ранг абсолюта. В нем нет даже переменных в привычном смысле этого слова. Например, в фрагменте
1 + (x + y) * 2 where x = 1; y = 2;
x
и y
являются не переменными, а возвращающими соответствующие числа функциями, правда, очень простыми.
Подобные выражения, где имеются левая и правая части, разделенный ключевым словом where
, типичны для Haskell. В первой части производится вызов функции, во второй описываются передаваемые ей параметры, сами являющиеся функциями.
Типичная тестовая программа "Hello, World!" выглядит на Haskell следующим образом:
module Main where
main :: IO ()
main = putStrLn "Hello, World!"
Рисунок 3. Фрагмент кода на Haskell. Автор24 — интернет-биржа студенческих работ
Область применения Haskell
Haskell широко используется для разработки спам-фильтров, сложных математических вычислений, криптографических программ, проектирования электронных схем, и даже ядер операционных систем. Применение этого языка облегчает и ускоряет разработку и поддержку масштабных софтверных продуктов. Haskell повышает и производительность исполняемого кода. Программы, написанные на этом языке, лаконичны, легче поддерживаются, содержат меньше ошибок.
Изучение Haskell полезно в любом случае, поскольку способствует развитию эффективных навыков программирования и у разработчиков, пишущих на других языках.