Haskell
Материал из Xgu.ru
Haskell — функциональный язык программирования со строгой типизацией и поддержкой ленивых вычислений. Весьма популярен в академической среде и имеет меньшую популярность как прикладной язык программирования.
Язык нельзя отнести ни к чисто интерпретируемым, ни к компилируемым; существуют как интерпретаторы (например, HUGS), так и компиляторы (например GHC, Glasgow Haskell Compiler) для Haskell.
Главными отличительными особенностями языка принято считать[1]:
- Чистоту (referential transparency);
- Отложенные вычисления[2] (lazyness);
- Строгую типизацию;
- Поддержку монад.
В качестве иллюстрации мощи языка часто[3] приводят реализацию алгоритма быстрой сортировки на Хаскеле и на Си[4]:
qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
void qsort(int a[], int lo, int hi) { { int h, l, p, t; if (lo < hi) { l = lo; h = hi; p = a[hi]; do { while ((l < h) && (a[l] <= p)) l = l+1; while ((h > l) && (a[h] >= p)) h = h-1; if (l < h) { t = a[l]; a[l] = a[h]; a[h] = t; } } while (l < h); t = a[l]; a[l] = a[hi]; a[hi] = t; qsort( a, lo, l-1 ); qsort( a, l+1, hi ); } }
Хаскель рекомендуют изучать не только для того чтобы его использовать в дальнейшем, но как минимум для того, чтобы начать иначе писать программы на тех языках, на которых писали раньше, и вообще по-другому начать смотреть на программирование.
Содержание |
[править] Известные программы на Haskell
Известные вещи, целиком или частично написанные на Haskell:
- Pugs — интерпретатор и компилятор для языка Perl 6;
- Darcs — распределённая система контроля версий;
- xmonad — фреймовый оконный менеджер; объём кода не превышает 1200 строк.
[править] Юмор
По музыкальной классификации языков[5] Хаскел можно сравнить с mathcore.
[править] См. также
[править] Дополнительная информация
- Haskell Tutorials (англ.) — большая коллекция ссылок на учебные материалы по языку Хаскель на сайте Haskell Wiki (многие перечисленные ниже ссылки представлены в этой коллекции)
- Learn You Haskell for Great Good! (англ.) — весёлая книжка про основы Хаскеля, которая читается очень легко, на одном дыхании. Рассчитана на тех, кто привык писать программы на императивных языках программирования (C, Perl, Python). Хорошо читается в сочетании с Real World Haskell; есть pdf[6]
- Real World Haskell (англ.) — очень хорошая книга про Хаскелю, написанная коллективом авторов, в числе которых создатель Mercurial; содержит глубокое рассмотрение многих ключевых вопросов функционального программирования; можно читать после Learn You Haskell for Great Good! или в сочетании с ней
- Haskell: введение в функциональное программирование (рус.) Краткий учебник от СУНЦ НГУ. В сжатом виде и с примерами рассмотрены основы программирования на Haskell и азы функционального программирования
- Основы / Haskell (рус.) — небольшой пост на Хабре, который можно прочитать как начальное преначальное введение в язык
- Haskell Quest Tutorial (рус.) - серия статей, написанных доступным и простым языком. Шаг за шагом разрабатывается текстовая приключенческая игра наподобие Zork. Очень подробные объяснения. Подойдет для изучения языка с нуля
- Презентации и материалы лекций 2010 года. (рус.) - Полный набор материалов "Теория функционального программирования. Язык Haskell" (видео, презентации, аудио) (!!)
- Коллекция «secsem Теория функционального программирования. Язык Haskell.» (рус.) - видеоролики из того же курса, на Яндекс.Видео
- Haskell в реальном мире (рус.) - статья о реальном применении языка в производстве (телекомы, биллинг)
- Haskell в настоящем проекте - другая статья о применении языка
- Типы данных, паттернг матчинг и функции / Haskell (рус.) (продолжение)
- Классы типов, монады (рус.) (и продолжение)
- Скрипты на Хаскеле (пробую писать) (рус.) — примеры простых, но полезных программ на Хаскеле
- Практика функционального программирования (рус.) — первый номер журнала по функциональному программированию (стоит прочитать всем, кто неравнодушен к вопросам изучения программирования) (следующие выпуски: 2, 3, 4)
- Category:Programming language:Haskell — Literate Programs (англ.) — категория Haskell на сайте Literate Programs (вообще сайт весьма годный: множество реализаций прекрасных алгоритмов на разнообразных языках программирования с подробным объяснением что, как и почему)
- Haskell-Cafe (англ.) — список рассылки, где доброжелательные люди мило беседуют о хаскелле, функциональном программировании и других интересных вещах
- A taste of Haskell (tutorial) (англ.) — быстрое введение в суть языка на примере кода оконного менеджера Xmonad, написанного на хаскеле
- Hitchhikers guide to Haskell (англ.) — быстрое введение в Хаскель от Дмитрия Астапова; начиная с Hello World и вперёд
- Write Yourself a Scheme in 48 Hours (англ.) — автор разрабатывает интерпретатор для Scheme на Хаскеле, попутно рассматривая этот язык, от самых азов и до самых глубин. Предполагается, что Scheme вы уже знаете
- Сильные стороны языка Haskell (рус.) - Неплохое освещение преимуществ и сущности языка Haskell
- Причины, по которым мне нравится Haskell (рус.) Довольно интересная статья о применимости языка
- Еще Одно Руководство по Монадам (рус.) - Перевод широко известного руководства Yet Another Monad Tutorial на русский язык
[править] Функциональное программирование
- Introduction to Functional Programming (1996/7) (англ.), на примере языка ML
- funprog-ru (рус.) — перевод курса Introduction to Functional Programming на русский язык
[править] Примечания
- ↑ http://www.haskell.org/pipermail/haskell-cafe/2009-May/061614.html
- ↑ Подробнее о них от Дмитрия Астапова [1]
- ↑ Хотя некоторые считают, что совершенно напрасно! [2]
- ↑ Но эта реализация на Си очень быстра и требует для исполнения несоизмеримо меньше памяти, чем реализация на Хаскеле. Сам Хаскель хотя и медленнее Си в общем случае, но ненамного [3]
- ↑ http://piranha.org.ua/blog/2008/05/10/musical-languages/
- ↑ http://learnyousomeerlang.com/ — Аналогичную книгу сделали и по Эрлангу; идею позаимствовали у Мирана Липовацы, картинки и текст сделали свои; не знаю, насколько получилась книжка, надо прочитать, но с виду один в один со своим прототипом, только картинки немного не такие прикольные