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


475

Навколо Haskell дуже багато шуму, проте важко отримати інформацію про те, як він використовується в реальних програмах. Які найпопулярніші проекти / звичаї Haskell і чому він вирішує ці проблеми?


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


12
@ Papuccino1, почекай, чи хочеш ти знати, для чого він корисний або для чого він створений ? Перше - це запитання, і там є багато місця для думки ...
bdonlan

3
@ Papuccino1 - Яку користь приносять зайві слова у вашій назві? Також, я думаю, ви неправильно розумієте використання терміна "функціонал" у цьому контексті, але це важко сказати.
Кріс Лутц

2
За їх власним сайту багатьох компаній використовують його для різних видів цілей ... haskell.org/haskellwiki/Haskell_in_industry
Julian

Відповіді:


309

Які існують у цій мові вживання?

Швидкий розвиток додатків.

Якщо ви хочете знати "чому Haskell?", То вам потрібно врахувати переваги функціональних мов програмування (взяті з https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • Функціональні програми, як правило, набагато коротше, ніж їхні імперативні мовні колеги. Часто це призводить до підвищення продуктивності програміста

  • 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.
J Atkin

8
@MartinDrautzburg Звичайно, заяви мають гарантії. Яку корисну мову мали б заяви без гарантій? Наприклад, в C x = 5;гарантує, що після його виконання, xмістить значення 5.
користувач253751

5
@ E4z9 Так, але в C ++ це гарантує те, що operator =називається. І це гарантує те, що станеться, якщо ви не визначите anoperator =
user253751

234

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


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

2
Facebook робить виявлення СПАМу з ним: code.facebook.com/posts/745068642270222/…
Alex

25
Ця відповідь, написана іншим тоном, говорить про те, що Haskell - це чудова вправа для програміста, яка IMO не робить великої мови загального призначення
Прохожий

5
У Keera Studios ми пишемо ігри та додатки для iOS та Android за допомогою Haskell.
Іван Перес

1
Я з цим повністю згоден. Я написав багато коду протягом десятиліть на імперативних мовах. Я досліджував Haskell пару місяців, і це відкрило мій погляд на речі, про які я раніше не думав.
Адахус

87

Є одна гарна відповідь на те, для чого корисна мова загального призначення, як Haskell: написання програм загалом.

Для того, для чого це використовується на практиці, у мене є три підходи до встановлення цього:

Вказує, що це добре для графіки, мереж, програмування систем, структур даних, баз даних, розробки, обробки тексту ...

І нарешті, моя думка щодо того, що це насправді сильне:

Я сподіваюсь, що це дасть вам зрозуміти, наскільки широке ваше запитання, якщо на нього потрібно відповісти з якоюсь конкретністю.


15
Хмара тегів розбита
Елліот Кемерон

чи була створена хмара тегів за допомогою wordcloud ?
Янус Троельсен

29

Одним із прикладів дії Haskell є xmonad , "функціональний менеджер вікон з менш ніж 1200 рядками коду".


18

З Вікна Haskell :

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

Згідно з Вікіпедією, мова Haskell була створена з необхідності консолідації існуючих функціональних мов у загальну мову, яка могла бути використана для майбутніх досліджень функціонально-мовного дизайну.

Виходячи з наявної інформації, очевидно, що вона переросла своє первісне призначення і використовується набагато більше, ніж для досліджень. Зараз він вважається функціональною мовою програмування загального призначення.

Якщо ви все ще запитуєте себе: "Навіщо мені це використовувати?", То прочитайте " Навіщо це використовувати?" розділ Введення Вікі Haskell.


13

Haskell - мова програмування загального призначення. Він може бути використаний для будь-якого використання будь-якої іншої мови. Вас не обмежує нічого, крім власної фантазії. Щодо того, для чого він підходить? Ну, майже все. Є кілька завдань, в яких функціональна мова не перевершує.

І так, я Рейн із Dreamincode. :)

Я також хотів би зазначити, що у випадку, якщо ви не читали сторінку Вікіпедії, функціональне програмування є парадигмою, як об'єктно-орієнтоване програмування - парадигма. Про всяк випадок, коли ви цього не знали. Haskell також функціональний у тому сенсі, що він працює; він досить добре працює на це.

Тільки тому, що мова не є об'єктно-орієнтованою мовою, це не означає, що мова нічим не обмежена. Haskell - мова програмування загального призначення, і така ж загальна мета, як і Java.


9

У мене класно, фейсбук створив автоматизований інструмент для переписування PHP-коду. Вони аналізують джерело на абстрактне синтаксичне дерево, роблять деякі перетворення:

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

Я не знаю чому, але, здається, це їхній особливий стиль, і тоді вони досить роздруковують його.

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

Ми використовуємо haskell для створення малих доменних мов. Величезна кількість обробки даних. Веб-розробка. Веб-павуки. Тестування додатків. Написання сценаріїв системного адміністрування. Сценарії вихідного дня, які спілкуються з іншими сторонами. Сценарії моніторингу (у нас є DSL, який чудово працює разом з munin, значно полегшує написання правильного коду монітора для ваших програм.)

Насправді всі речі. Це просто повсякденна мова загального призначення з деякими дуже потужними та корисними функціями, якщо ви трохи схильні до математики.


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

Це розумно, ваша сила, яка особливо помиляється, коли буде відома компіляція часу.
Едгар Клеркс

@EdgarKlerks, PHP не має часу на компіляцію. Це змушує створювати виняток там, де була помилка, а не призводить до химерної поведінки чи помилок у віддаленому коді.
dfeuer

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

1
@JeremyList Можливо, вони дійсно суворі щодо стилю кодування. Я бачу, що акуратно відформатований код пропонує написати більш акуратно відформатований код. Просто дика здогадка.
Едгар Клеркс

6

З Haskell :

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.