Що є найбільш сумісною, широко використовуваною виробничою мовою для експорту знань та навичок, отриманих від Haskell?


14

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

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

Відповіді:


21

Haskell найбільш тісно пов'язаний із сімейством мов ML. Це , звичайно, включає такі речі, як OCaml , але також F # на платформі .NET. Ці мови діляться з Haskell основою системи типів і тим, як використовуються дані - алгебраїчні типи даних, відповідність шаблонів, умовиведення типу тощо. Звичайно, вони можуть суттєво відрізнятися від Haskell в інших моментах, звичайно - більшість ML є суворими і нечистими Для початку і популярність Haskell як транспортного засобу для дослідження типів систем та мовного дизайну означає, що більшість мов стилю ML мають тенденцію мати менш потужні (але потенційно простіші для розуміння) системи типів. Це, мабуть, сміливо сказати, що, хоча ви можете пропуститидеякі речі щодо Haskell, особливо спочатку, більшість програмістів Haskell, ймовірно, почуватимуться комфортно як вдома в ML, досить швидко, на базовому рівні виконання завдань. Якщо ви хочете мову з такою ж загальною структурою, як і Haskell, ML - це найкраща пропозиція.

Функціональна сторона Scalaтакож значною мірою витягує з традицій ML, а також використовує деякі особливості сучасного типу, знайомі з Haskell, а також більш стандартну систему OOP, інтегровану з вищезазначеним. Хоча ОО на мовах стилю ML, як правило, підходить як більше до "модельного OO з основними функціональними інструментами", Scala живе і дихає OO у стилі Java. Це має переваги для Java interop, як ви могли уявити, і представляє більш звичне робоче середовище для програмістів OO. Однак, виходячи з фону Haskell, ви, швидше за все, дратуєтесь способами, що змішування речей у Scala робить функціональні ідіоми незграбнішими, а більшість Java-API виявляються погано розробленими та непотрібними у використанні.

Нарешті, хоча це може здатися дивним, Clojure насправді має багато спільного з Haskell на більш філософському рівні. Більшість того, що ви знайдете у підході Clojure до стану та цінностей проти ідентичності , дуже близьке за духом до того, що Haskell формалізує через систему типів. Відповідно, Clojure в меншій мірі наголошує на інтеропі Java та не переживає з приводу перетягування OOP, тому певний підхід Clojure до функціонального програмування може бути найближчим до того, що ви вже знайомі. Я думаю, що це говорить з цього приводу, що, наскільки мені відомо, Clojure є єдиною мовою, крім Haskell, яка має реалізацію STMце просто, ефективно і просто працює. З іншого боку, Clojure походить від традиції Ліспа і, таким чином, не вистачає системи статичного типу та акцентується на алгебраїчних типах даних та узгодженні шаблонів, виявлених на мовах, що впливають на ML. І звичайно, це Lisp, який сам по собі є негативом для деяких людей (хоча я дійсно не знаю чому).

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


1
Кажуть, що F # надихнув OCaml, якщо не походить від нього. Попереднє питання SO, F # та OCaml , охоплює гарне обговорення цих відносин. Якщо ви перебуваєте на стороні .NET, F # стане відмінним вибором, і тепер Microsoft вважає F # "мовою .NET" першого класу. Що стосується JVM, Scala має досвід промислового використання, і Clojure, схоже, зростає в чартах. Я не знаю жодного найкращого вибору на даний момент, оскільки ринок ще не оголосив чіткого переможця в цьому об'єктно-функціональному просторі.
Джон Тоблер

4

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


3

Функціональною альтернативою є Ерланг . Хоча це дуже паралельна мова, послідовний підмножина є чистою функціональною мовою з багатьма властивостями функціональних мов, наприклад, закриття, незмінні дані та відповідність шаблонів. Він працює на багатьох платформах, включаючи Linux, різні Unix, Windows та macosx. Зараз є навіть реалізація на JVM, erjang . Він може легко спілкуватися та співіснувати з іншими мовами, саме так воно часто використовується.

Ознайомтеся з головним сайтом .


3

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

Основні функції Clojure, які користувачі Haskell можуть знайти знайомими та переконливими:

  • Основна мова суто функціональна - хоча можливі побічні ефекти, вони заховані в певних місцях (наприклад, посилання STM, функції IO, сумісність Java)
  • Усі структури даних незмінні та стійкі
  • Лінь - досягнута значною мірою завдяки всюдисущим послідовним послідовностям Clojure, це почуватиметься дуже знайомим користувачам Haskell. Безмежні ліниві послідовності - це добре.
  • Програмна операційна пам'ять - головний спосіб обробки змінного стану в Clojure. Варто переглянути це чудове відео, де Річ Хікі пояснює підхід Clojure до ідентичності та стану: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

Основні відмінності (можуть бути позитивними чи негативними залежно від вашої точки зору):

  • Це нечисто - хоча моє зауваження, що ідіоматичний стиль Clojure - це виконувати чисті функції, де це можливо.
  • Динамічне, а не статичне введення тексту (хоча підказки статичного типу можна використовувати додатково для оптимізації продуктивності)
  • Це мова JVM з легким доступом до всієї екосистеми бібліотеки Java - це, на мою думку, найбільша перевага з точки зору застосовності до реального світу
  • Синтаксис Lisp. Таким чином, ви отримуєте всі переваги гомонікості , ціною того, щоб навчитися бачити всі дужки :-)

Особиста перспектива: я навчився Haskell перед Clojure, і полюбив Haskell за його елегантність та математичну чистоту. Clojure черпає багато натхнення і запозичує багато хороших рис у Haskell, але є набагато більш прагматичним / практичним мовою. Тим більше, коли ви рахуєте величезну цінність використання екосистеми бібліотеки Java, то це чудова мова для "завершення роботи".


1

Якщо вам подобається Haskell, але вам потрібно ввести код для JVM, frege може бути цікавим для вас. Він розроблений максимально наближено до Haskell 2010, але при цьому генерує код Java.

Звичайно, сам frege - це не що інше, як "широко використовувана виробнича мова" (це нещодавно опубліковано), але Java, безумовно, є.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.