2009-10-22 4 views
389

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

+35

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

+6

dupe? http://stackoverflow.com/questions/775726/whats-the-fuss-about-haskell – bdonlan

+10

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

ответ

258

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

Быстрое применение.

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

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

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

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

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

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

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

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

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

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

+9

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

+0

Его также для контроля вашего Death Ray с высокой точностью! http://www.yellosoft.us/evilgenius/ – QuantumKarl

+0

Haskell очень, очень далек от того, что я бы традиционно считал «RAD» в подобных Visual Basic или Delphi. RAD меньше относится к языку и больше о таких инструментах, как GUI-дизайнеры и связанное с ними генерирование шаблонов инструментами. –

3

От Haskell:

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

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

2

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

Open Source Haskell Releases and Growth

+0

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

+2

Похоже, что этот ресурс не обновлялся с 2009 года. –

24

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

14

От the Haskell Wiki:

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

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

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

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

73

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

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

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

  • Areas it is used in industry - много, DSL, веб-приложений, дизайн компилятор, сетей, анализ, системы программирования, ...

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

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

+13

Облако тегов сломано. –

+0

был облаком тегов, сгенерированным с помощью [wordcloud] (https://github.com/chrisdone/wordcloud)? –

11

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

И да, я Rayne от Dreamincode. :)

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

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

184

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

+1

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

+1

Facebook обнаруживает спам с ним: https://code.facebook.com/posts/745068642270222/fighting-spam-with-haskell/ – axaluss

+13

Этот ответ написан другим тоном , говорит, что Haskell - отличное упражнение для программиста, в котором ИМО не делает большой язык общего назначения. –

8

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

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

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

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

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

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

+4

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

+0

. Это умно, ваш заставляйте, в частности, ошибку быть известным временем компиляции. –

+0

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

4

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

Смежные вопросы