для чего используется haskell в реальном мире?

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

<blockquote> <p>каковы некоторые общие применения для этого языка?</p> </blockquote><p>быстрая разработка приложений.</p><p>если вы хотите узнать "почему haskell?", то вам нужно рассмотреть преимущества функциональных языков программирования (взято из <a href="http://c2.com/cgi/wiki?advantagesoffunctionalprogramming">http://c2.com/cgi/wiki?advantagesoffunctionalprogramming</a> ):</p><blockquote> <ul> <li> <p>функциональные программы имеют тенденцию быть гораздо более краткими, чем их аналоги imperativelanguage. часто это приводит к повышению производительности программиста</p> </li> <li> <p>fp поощряет быстрое создание прототипов. таким образом, я думаю, что это лучшая парадигма разработки программного обеспечения для extremeprogrammers ... но что я знаю?</p> </li> <li> <p>fp является модульным в измерении функциональности, где objectorientedprogramming является модульным в измерении различных компонентов.</p> </li> <li> <p>возможность съесть свой торт и съесть его. представьте, что у вас сложная oo система обработки сообщений - каждый компонент может вносить изменения в состояние в зависимости от сообщения, а затем пересылать сообщение некоторым объектам, на которые он ссылается. разве это не было бы слишком круто, чтобы иметь возможность легко откатить каждое изменение, если какой-то объект глубоко в иерархии вызовов решил, что сообщение ошибочно? как насчет истории разных государств?</p> </li> <li> <p>многие хозяйственные задачи созданы для вас: деконструкция структур данных (patternmatching), хранение привязок переменных (lexicalscope с замыканиями), строгая типизация (typeinference), garbagecollection, выделение хранилища, использовать ли в штучной упаковке (указатель на значение) или в штучной упаковке (значение напрямую ) представление...</p> </li> <li> <p>безопасная многопоточность! неизменяемые структуры данных не подчиняются условиям гонки данных и, следовательно, не должны быть защищены от блокировок. если вы всегда размещаете новые объекты, а не деструктивно манипулируете существующими, блокировка может быть скрыта в системе выделения и garbagecollection.</p> </li> </ul> </blockquote><p>помимо этого у haskell есть свои преимущества, такие как:</p><ul> <li>четкий, интуитивно понятный синтаксис, основанный на математических обозначениях.</li> <li>составьте список, чтобы создать список на основе существующих списков.</li> <li>лямбда-выражения: создавайте функции, не давая им явных имен. так что проще обрабатывать большие формулы.</li> <li>haskell полностью <a href="http://www.haskell.org/haskellwiki/referential\_transparency">ссылочно-прозрачный</a> . любой код, который использует ввод/вывод, должен быть помечен как таковой. таким образом, он поощряет вас отделять код с побочными эффектами (например, вывод текста на экран) от кода без (вычислений).</li> <li>ленивая оценка - действительно хорошая особенность: <ul> <li>даже если что-то обычно вызывает ошибку, оно все равно будет работать, если вы не используете результат. например, вы можете поместить <code>1 / 0</code> в качестве первого элемента списка, и он все равно будет работать, если вы используете только второй элемент.</li> <li>проще написать поисковые программы, такие как this <a href="http://web.archive.org/web/20130823222012/http://www.cs.tufts.edu/~nr/comp150fp/archive/richard-bird/sudoku.pdf">sudoku solver</a> , потому что он не загружает каждую комбинацию сразу - он просто генерирует их по мере продвижения. вы можете сделать это на других языках, но только haskell делает это <em> по умолчанию </em>.</li> </ul> </li> </ul><p>вы можете проверить следующие ссылки:</p><ul> <li> <a href="http://c2.com/cgi/wiki?advantagesoffunctionalprogramming">http://c2.com/cgi/wiki?advantagesoffunctionalprogramming</a> </li> <li> <a href="http://blogs.msdn.com/wesdyer/archive/2007/01/18/why-functional-programming-is-important-in-a-mixed-environment.aspx">http://blogs.msdn.com/wesdyer/archive/2007/01/18/why-functional-programming-is-important-in-a-mixed-environment.aspx</a> </li> <li> <a href="http://blog.kickino.org/archives/2007/05/22/t22\_34\_16/">http://blog.kickino.org/archives/2007/05/22/t22\_34\_16/</a> </li> <li> <a href="http://useless-factor.blogspot.com/2007/05/advantage-of-functional-programming.html">http://useless-factor.blogspot.com/2007/05/advantage-of-functional-programming.html</a> </li> </ul>

<p>я думаю, что люди в этом посте упускают самый важный момент для тех, кто никогда не использовал функциональный язык программирования: расширение вашего разума. если вы новичок в функциональном программировании, то haskell заставит вас думать так, как вы никогда не думали раньше. в результате ваше программирование в других областях и на других языках улучшится. сколько? трудно определить количественно.</p>

<p>есть один хороший ответ на вопрос, для чего хорош язык общего назначения, такой как haskell: написание программ в целом.</p><p>для чего он используется на практике, у меня есть три подхода к установлению этого:</p><ul> <li> <a href="http://donsbot.wordpress.com/2009/01/24/what-is-haskell-good-for/">облако тегов библиотеки haskell и областей приложения</a> , взвешенное по частоте на hackage.</li> </ul><p>указывает, что это хорошо для графики, сетей, системного программирования, структур данных, баз данных, разработки, обработки текста ...</p><ul> <li> <a href="http://haskell.org/haskellwiki/haskell\_in\_industry">области его применения в промышленности</a> - множество dsl, веб-приложений, разработка компиляторов, создание сетей, анализ, системное программирование, ...</li> </ul><p>и, наконец, мое мнение о том, в чем оно действительно сильное:</p><ul> <li> <a href="http://web.archive.org/web/20130203023724/http://www.sdtimes.com/blog/post/2009/07/27/everyonee28099s-talking-about-haskell.aspx">проблемы, где важна корректность, специфичные для предметной области языки, а также параллельное и параллельное программирование</a> </li> </ul><p>я надеюсь, что это дает вам представление о том, насколько широк ваш вопрос, если на него нужно ответить с какой-либо конкретностью.</p>

<p>одним из примеров haskell в действии является <a href="http://xmonad.org">xmonad</a> , "многофункциональный оконный менеджер, содержащий менее 1200 строк кода".</p>

<p>от <a href="http://www.haskell.org/haskellwiki/haskell\_in\_industry">haskell wiki</a> :</p><blockquote> <p>haskell широко используется в коммерческих целях: от аэрокосмической и оборонной промышленности до финансов, для веб-стартапов, фирм по разработке оборудования и производителей газонокосилок. на этой странице собраны ресурсы по промышленному использованию haskell.</p> </blockquote><p>согласно википедии, язык <a href="http://en.wikipedia.org/wiki/haskell\_(programming\_language)">haskell</a> был создан из-за необходимости объединить существующие функциональные языки в общий язык, который можно было бы использовать для будущих исследований в области функционально-языкового проектирования.</p><p>судя по имеющейся информации, очевидно, что она переросла свое первоначальное назначение и используется не только для исследований. в настоящее время считается универсальным функциональным языком программирования.</p><p>если вы все еще спрашиваете себя: "зачем мне это использовать?", тогда прочитайте раздел <a href="http://www.haskell.org/haskellwiki/introduction#why\_use\_haskell.3f"><em> зачем его использовать? </em></a> введение в haskell wiki.</p>

<p>haskell - это язык программирования общего назначения. он может быть использован для всего, что вы используете любой другой язык. вы ничем не ограничены, кроме своего собственного воображения. для чего он подходит? ну, почти все. есть несколько задач, в которых функциональный язык не excel.</p><p>и да, я рейн из dreamincode. :)</p><p>я также хотел бы отметить, что, если вы не читали страницу википедии, функциональное программирование - это парадигма, как объектно-ориентированное программирование - это парадигма. на всякий случай, если вы не знали. haskell также функционален в том смысле, что он работает; это работает довольно хорошо в этом.</p><p>тот факт, что язык не является объектно-ориентированным языком, не означает, что язык ограничен чем-либо. haskell - это язык программирования общего назначения, и он так же универсален, как и java.</p>

<p>у меня есть крутой, facebook создал автоматизированный инструмент для переписывания php кода. они анализируют источник в абстрактном синтаксическом дереве, делают некоторые преобразования:</p><pre><code>if ($f == false) -> if (false == $f) </code></pre><p>я не знаю почему, но это, кажется, их особый стиль, и тогда они довольно печатают его.</p><p> <a href="https://github.com/facebook/lex-pass">https://github.com/facebook/lex-pass</a> </p><p>мы используем haskell для создания небольших специфичных для домена языков. огромные объемы обработки данных. веб-разработка. веб пауки. тестирование приложений. написание сценариев системного администрирования. бэкэнд-скрипты, которые общаются с другими сторонами. сценарии мониторинга (у нас есть dsl, который прекрасно работает вместе с munin, значительно облегчает написание правильного кода монитора для ваших приложений.)</p><p>все виды вещей на самом деле. это просто повседневный язык общего назначения с некоторыми очень мощными и полезными функциями, если вы немного склонны к математике.</p>

<p>от <a href="http://en.wikipedia.org/wiki/haskell\_%28programming\_language%29">haskell</a> :</p><blockquote> <p>haskell - это <strong> <em> стандартизированный, чисто функциональный язык программирования общего назначения </em> </strong>, со строгой семантикой и сильным статическая типизация. он назван в честь логика хаскелла карри.</p> </blockquote><p>по сути, haskell может использоваться для создания практически всего, что вы обычно создаете, используя другие языки общего назначения (например, c #, java, c, c++ и т.д.).</p>

<p>например, для разработки интерактивных веб-приложений html5 в реальном времени. смотрите <a href="http://elm-lang.org">elm</a> , компилятор которого реализован на haskell и синтаксис которого много заимствует из haskell.</p>

<p>это довольно хороший источник информации о haskell и его использовании:</p><p> <a href="http://archhaskell.wordpress.com/2009/01/18/open-source-haskell-releases-and-growth"><strong> релизы и рост haskell с открытым исходным кодом </strong></a> </p>