Функциональные языки (Erlang, F #, Haskell, Scala)

Constraint является видом, например. Show Int, Monad Maybe и Monoid [a]. Грубо говоря, это то, что может происходить в левой части => в аннотациях типа.

Теперь, поскольку

Show Int :: Constraint

и Int - тип, т.е.

Int :: *

, мы можем присвоить функциональный вид Show следующим образом

Show :: * -> Constraint
             ^-- the result kind
        ^-- the kind of Int

. В вашем случае просто происходит, что Monad принимает аргумент, подобный Maybe , поэтому

Maybe Int :: *
Maybe :: * -> *
Monad :: (* -> *) -> Constraint
                     ^-- the result kind
         ^-- the kind of Maybe
29
задан Peter Mortensen 11 December 2010 в 22:46
поделиться

10 ответов

Функциональные языки, которые вы описываете, являются языками программирования общего назначения, они используются для любых целей, включая веб-приложения и бизнес-приложения. (Я использую Haskell).

Как следует из Габора, в конечном итоге все сводится к библиотекам. У Scala есть веб-фреймворк: lift. На Haskell есть happstack , а также 2100 4400 (в 2010 2012) библиотек на Hackage для всех видов вещей.

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

30
ответ дан Don Stewart 11 December 2010 в 22:46
поделиться

Функциональные языки хорошо подходят для разработки веб-приложений, в частности Scala.

Посмотрите на Lift рамки для получения дополнительной информации.

11
ответ дан Peter Mortensen 11 December 2010 в 22:46
поделиться
  1. Да, азот является хорошим примером функциональной веб-структуры. Это также масштабируется.

http://nitrogenproject.com/

8
ответ дан Flinkman 11 December 2010 в 22:46
поделиться

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

Например, я уверен, что вы можете использовать F # вместе с ASP.Net на IIS для веб-разработки. Я сомневаюсь, что есть поддержка F # в шаблонизаторе, но вы определенно можете написать бизнес-логику на F #.

Точно так же, есть mod_haskell для Apache, который должен относительно облегчить динамический вывод с помощью haskell. Хотя я никогда не использовал это лично. В то же время, если для Apache есть mod_(erlang or scala), то для этих языков это будет так же просто.

В конечном счете, я думаю, что природа функциональных языков без сохранения состояния должна сделать ее хорошо подходящей для веб-фреймворка в стиле MVC без сохранения состояния. Тем не менее, я думаю, что все сводится к тому, какие инструменты и инфраструктуры доступны, чтобы облегчить вашу жизнь при работе с этими языками. Например, Ruby не пользовался популярностью для веб-разработки до тех пор, пока не стали популярными rails, и мне не очень нравилось делать что-либо с Python, пока я не нашел django.

3
ответ дан dustyburwell 11 December 2010 в 22:46
поделиться

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

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

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

Учитывая эти характеристики веб-приложений, какие преимущества функциональные языки приносят при разработке веб-приложений?

-2
ответ дан Clint Miller 11 December 2010 в 22:46
поделиться

2) Подходят ли функциональные языки для приложений для бизнеса / ERP / CRM?

Для решения второго вопроса о приложениях для бизнеса / ERP / CRM: лично я бы не стал внедрять они на «чистом» функциональном языке, таком как Haskell, или на динамическом функциональном языке, таком как Clojure. С другой стороны, я в настоящее время внедряю ERP в Scala, которая, конечно, является гибридной OOP / FP и статически компилируется.

Причина, по которой я говорю это, заключается в том, что бизнес-приложение, такое как ERP, в основном ориентировано на записи: существует схема данных, выражающая различные типы записей, и логика приложения затем почти полностью разрабатывается вокруг CRUDing этих записей и применения пользовательских бизнес-процессов. им. И в сущности, я не верю, что такого рода бизнес-приложения, ориентированные на данные, идеально подходят для функциональной модели.

Люди могут говорить об OOP-реляционном несоответствии всем, что им нравится, но в конечном итоге и OOP, и базы данных ориентированы на записи: язык OOP с хорошим ORM позволяет отображать эти разные модели данных в код, а затем присоединять код для обработки. каждая из моделей. И наличие этого статически типизированного (в идеале со строго типизированным ORM, такого как Squeryl Scala) значительно снижает вероятность ошибки во время выполнения или, например, изменение одной из моделей данных, которые не были должным образом применены в коде.

Не поймите меня неправильно - я большой поклонник FP (я все больше и больше занимаюсь системным программированием на Haskell), но для меня ориентированный на записи подход ООП имеет больше смысла, чем функция -ориентированный подход FP для обработки объектов данных бизнес-ERP или аналогичных. (Scala - хорошее исключение из правила, потому что вы можете использовать парадигму ООП с качественными ORM для манипулирования записями, но также и совершенство FP для вашего общего программирования приложений.)

9
ответ дан Alex Dean 11 December 2010 в 22:46
поделиться

Функциональные языки хороши для всего, для чего вы хотели бы их использовать.

Однако разработка приложений в наши дни не так проста, как использование языка программирования. Преимущество Java, C # и т. Д. Состоит в том, что они поставляются с большими библиотеками и другими тонкостями среды, которые абсолютно необходимы при создании бизнес-программ. Большинство функциональных языков не имеют такой большой поддержки (пока?).

F # может быть многообещающим, поскольку он находится в среде .NET и может использовать имеющиеся там инструменты (поправьте меня, если я ошибаюсь).

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

17
ответ дан Peter Mortensen 11 December 2010 в 22:46
поделиться

Yaws - фантастический веб-сервер для Эрланга.

4
ответ дан Peter Mortensen 11 December 2010 в 22:46
поделиться

Большинство функциональных языков, а именно те, которые вы включили, считаются языками общего назначения. Для веб-разработки, я бы глубоко подумал об использовании Clojure или Scala. У них обоих есть очень хорошие веб-фреймворки, и они оба работают на JVM. Я могу полностью порекомендовать Clojure и Scala, но не так сильно для остальных.

У Haskell есть веб-фреймворк, но я никогда не использовал его.

Бизнес-приложения? Конечно, почему бы и нет. Функциональные языки хороши практически для всего.

3
ответ дан Rayne 11 December 2010 в 22:46
поделиться

Функциональные языки предоставляют новые виды абстракций, которые можно использовать для веб-разработки. Веб-серверы на основе продолжения, например, популярны среди функциональных языков. Веб-сервер PLT Scheme поддерживает этот вид разработки веб-приложений. Вы можете прочитать больше о продолжениях и их использовании в веб-разработке в Википедии

3
ответ дан Jonas 11 December 2010 в 22:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: