Для чего используется Haskell в реальном мире? [закрыто]


475

В Haskell много ажиотажа, однако трудно получить информацию о том, как он используется в реальных приложениях. Какие проекты / использования Haskell наиболее популярны и почему они превосходны в решении этих проблем?


56
Нет, не буду, потому что это четкий ответ. Нет места для маневра для мнений и тому подобное. Я просто хочу знать, для чего был создан язык.
Серхио Тапиа


12
@ Papuccino1, подождите, вы хотите знать , что это полезно для, или то , что он был создан для? Первое - это то, что задает вопрос, и там есть много места для мнений ...
bdonlan

3
@ Papuccino1 - Какую пользу принесут дополнительные слова в вашем названии? Кроме того, я думаю, что вы неправильно понимаете использование термина «функционал» в этом контексте, но трудно сказать.
Крис Латс

2
Согласно их собственному веб-сайту, многие компании используют его для различных целей ... haskell.org/haskellwiki/Haskell_in_industry
Джулиан

Ответы:


309

Каковы некоторые общие применения для этого языка?

Быстрая разработка приложений.

Если вы хотите узнать «почему Haskell?», То вам нужно рассмотреть преимущества функциональных языков программирования (взято с https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • Функциональные программы имеют тенденцию быть намного более краткими, чем их аналоги ImperativeLanguage. Часто это приводит к повышению производительности программиста

  • FP поощряет быстрое создание прототипов. Таким образом, я думаю, что это лучшая парадигма разработки программного обеспечения для ExtremeProgrammers ... но что я знаю?

  • FP является модульным в измерении функциональности, где ObjectOrientedProgramming является модульным в измерении различных компонентов.

  • Возможность съесть свой торт и съесть его. Представьте, что у вас сложная система обработки сообщений OO - каждый компонент может вносить изменения в состояние в зависимости от сообщения, а затем пересылать сообщение некоторым объектам, на которые он ссылается. Разве это не было бы слишком круто, чтобы иметь возможность легко откатить каждое изменение, если какой-то объект глубоко в иерархии вызовов решил, что сообщение ошибочно? Как насчет истории разных государств?

  • Многие домашние задачи сделаны для вас: деконструкция структур данных (PatternMatching), хранение привязок переменных (LexicalScope с замыканиями), строгая типизация (TypeInference), GarbageCollection, выделение хранилища, использовать ли в штучной упаковке (указатель на значение) или в штучной упаковке (значение напрямую ) представление...

  • Безопасная многопоточность! Неизменяемые структуры данных не подчиняются условиям гонки данных и, следовательно, не должны быть защищены от блокировок. Если вы всегда выделяете новые объекты, а не разрушительно манипулируете существующими, блокировка может быть скрыта в системе выделения и GarbageCollection.

Помимо этого у Haskell есть свои преимущества, такие как:

  • Четкий, интуитивно понятный синтаксис, основанный на математических обозначениях.
  • Составьте список для создания списка на основе существующих списков.
  • Лямбда-выражения: создавайте функции, не давая им явных имен. Так что легче обрабатывать большие формулы.
  • Haskell полностью прозрачен . Любой код, который использует ввод / вывод, должен быть помечен как таковой. Таким образом, он поощряет вас отделять код с побочными эффектами (например, вывод текста на экран) от кода без (вычислений).
  • Ленивая оценка - это действительно хорошая функция:
    • Даже если что-то обычно вызывает ошибку, оно все равно будет работать, если вы не используете результат. Например, вы можете поместить 1 / 0в качестве первого элемента списка, и он все равно будет работать, если вы используете только второй элемент.
    • Писать программы поиска, такие как этот решатель судоку, легче, потому что он не загружает каждую комбинацию сразу - он просто генерирует их по мере продвижения. Вы можете сделать это на других языках, но только Haskell делает это по умолчанию .

Вы можете проверить следующие ссылки:


20
Следующая мысль часто приходит мне в голову: на чистом языке функция всегда возвращает один и тот же результат, когда передается один и тот же параметр. Это гарантия. В отличие от императивных языков, все строится на основе «утверждений». Заявление не сопровождается какой-либо гарантией (за исключением того, что его выполнение требует времени и производит тепло). Таким образом, основание уже шатко, и все, что находится на нем, останется шатким. Для меня это было одной из причин изучения haskell.
Мартин Драуцбург

8
Прошло 6 лет с тех пор, как был задан этот вопрос, и с того момента, как дебютировал язык программирования Go. Несмотря на более слабую систему типов и, как правило, «объективно неполноценность» (по мнению функциональных фанатов / поклонников ML), ей удалось отгрузить больше (и более важно) программного обеспечения за эти 6 лет, чем у Haskell за 26 лет. Я имею в виду это как тематическое исследование; есть вещи, которые сдерживают функциональные языки, и их нельзя отнести к обману.
weberc2

3
Вы забыли точку зрения - кодирование в haskell - абсолютный взрыв;) Мне было очень весело пробовать свои силы в некоторых проблемах в haskell.
Дж Аткин

8
@MartinDrautzburg Конечно, заявления идут с гарантиями. На каком полезном языке были бы заявления без гарантий? Например, в C x = 5;гарантирует, что после его выполнения xсодержит значение 5.
user253751

5
@ E4z9 Да, но в C ++ это гарантирует, что operator =это называется. И это гарантирует, что произойдет, если вы не определитеoperator =
user253751

234

Я думаю, что люди в этом посте упускают самый важный момент для тех, кто никогда не использовал функциональный язык программирования: расширение вашего разума. Если вы новичок в функциональном программировании, то Haskell заставит вас думать так, как вы никогда не думали раньше. В результате ваше программирование в других областях и на других языках улучшится. Как много? Трудно определить количественно.


2
Я использую iPhone, Mac. Где используется Haskell? Я имею в виду для приложений, которые я использовал, они написаны на Objective-C или Swift + что-то для базы данных и серверов. Swift также может быть функциональным. Итак, снова я запутался в том, где он используется
Мед

2
Facebook делает обнаружение СПАМА
Алекс

25
Этот ответ, написанный другим тоном, говорит о том, что Haskell - отличное упражнение для программиста, из которого IMO не делает отличный язык общего назначения
Passer By

5
В Keera Studios мы пишем игры и приложения для iOS и Android, используя Haskell.
Иван Перес

1
Я полностью согласен с этим. За десятилетия я написал много кода на императивных языках. Я изучал Haskell в течение нескольких месяцев, и это открыло мне мысли о вещах, о которых я раньше не думал.
Адаус

87

Есть один хороший ответ на вопрос, для чего хорош язык общего назначения, такой как Haskell: написание программ в целом.

Для чего он используется на практике, у меня есть три подхода к установлению этого:

Указывает, что это хорошо для графики, сетей, системного программирования, структур данных, баз данных, разработки, обработки текста ...

И, наконец, мое мнение о том, в чем оно действительно сильное:

Я надеюсь, что это дает вам представление о том, насколько широк ваш вопрос, если на него нужно ответить с какой-либо конкретностью.


15
Облако тегов сломано
Эллиот Кэмерон

облако тегов было сгенерировано с помощью Wordcloud ?
Янус Троелсен

29

Одним из примеров Haskell в действии является xmonad , «многофункциональный оконный менеджер, содержащий менее 1200 строк кода».


18

Из Haskell Wiki :

Haskell широко используется в коммерческих целях - от аэрокосмической и оборонной промышленности до финансов, для веб-стартапов, фирм по разработке оборудования и производителей газонокосилок. На этой странице собраны ресурсы по промышленному использованию Haskell.

Согласно Википедии, язык Haskell был создан из-за необходимости объединить существующие функциональные языки в общий язык, который можно было бы использовать для будущих исследований в области функционально-языкового проектирования.

Судя по имеющейся информации, очевидно, что он перерос свое первоначальное назначение и используется не только для исследований. В настоящее время считается универсальным функциональным языком программирования.

Если вы все еще спрашиваете себя: «Зачем мне это использовать?», Тогда прочитайте « Зачем его использовать»? раздел Введение в Haskell Wiki.


13

Haskell - это язык программирования общего назначения. Он может быть использован для всего, что вы используете любой другой язык. Вы ничем не ограничены, кроме своего собственного воображения. Для чего он подходит? Ну, почти все. Есть несколько задач, в которых функциональный язык не превосходит.

И да, я Рейн из Dreamincode. :)

Я также хотел бы отметить, что, если вы не читали страницу Википедии, функциональное программирование - это парадигма, как объектно-ориентированное программирование - это парадигма. На всякий случай, если вы не знали. Haskell также функционален в том смысле, что он работает; это работает довольно хорошо в этом.

Тот факт, что язык не является объектно-ориентированным языком, не означает, что язык ограничен чем-либо. Haskell - это язык программирования общего назначения, и он так же универсален, как и Java.


9

У меня есть крутой, Facebook создал автоматизированный инструмент для переписывания кода PHP. Они анализируют источник в абстрактном синтаксическом дереве, делают некоторые преобразования:

if ($f == false) -> if (false == $f)

Я не знаю почему, но это, кажется, их особый стиль, и тогда они довольно печатают его.

https://github.com/facebook/lex-pass

Мы используем haskell для создания небольших специфичных для домена языков. Огромные объемы обработки данных. Веб-разработка. Веб пауки. Тестирование приложений. Написание сценариев системного администрирования. Бэкэнд-скрипты, которые общаются с другими сторонами. Сценарии мониторинга (у нас есть DSL, который прекрасно работает вместе с munin, значительно облегчает написание корректного кода монитора для ваших приложений.)

Все виды вещей на самом деле. Это просто повседневный язык общего назначения с некоторыми очень мощными и полезными функциями, если вы немного склонны к математике.


6
Re: стиль FB, поставив false перед == означает, что если вы забудете и напишите только один =, то результирующее поведение будет более очевидно неправильным, вместо того, чтобы молча выполнять непреднамеренную операцию присваивания и продолжать нормально
Magnus

А это умно, ваша сила, что особенно ошибка, которая будет известна время компиляции тогда.
Эдгар Клеркс

@EdgarKlerks, PHP не имеет времени компиляции. Это вынуждает создавать исключение там, где была ошибка, а не приводить к странному поведению или ошибкам в удаленном коде.
dfeuer

Хотя я вижу преимущество написания falseслева, я не вижу смысла в использовании инструмента для его автоматического выполнения: если у вас уже есть ==оператор, то вы уже знаете, что у вас нет ошибки, которую эта часть lex-pass предназначен для ловли, и если у вас есть =вместо этого нет надежного способа определить, намеренно ли это так или нет.
Джереми Список

1
@JeremyList Возможно, они действительно строгие в стиле кодирования. Я вижу, что аккуратно отформатированный код предлагает писать более аккуратно отформатированный код. Просто дикая догадка.
Эдгар Клеркс

6

Из Хаскелла :

Haskell - это стандартизированный, чисто функциональный язык программирования общего назначения с не строгой семантикой и строгой статической типизацией. Он назван в честь логика Хаскелла Карри.

По сути, Haskell может использоваться для создания практически всего, что вы обычно создаете, используя другие языки общего назначения (например, C #, Java, C, C ++ и т. Д.).


5

Например, для разработки интерактивных веб-приложений HTML5 в реальном времени. См. Elm , компилятор которого реализован на Haskell и синтаксис которого много заимствует из Haskell.


3

Это довольно хороший источник информации о Haskell и его использовании:

Открытые исходники Haskell релизы и рост


Ответы только на ссылки не идеальны. Тем не менее, поскольку этот вопрос закрыт, возможно, лучше отредактировать, чем удалить.
dfeuer

3
Кажется, этот ресурс не обновлялся с 2009 года.
Роберт Харви
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.