Функциональные языки (Erlang, F #, Haskell, Scala) - PullRequest
29 голосов
/ 04 мая 2009

1) Подходят ли функциональные языки для разработки веб-приложений?

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

Ответы [ 10 ]

30 голосов
/ 04 мая 2009

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

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

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

17 голосов
/ 04 мая 2009

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

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

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

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

11 голосов
/ 04 мая 2009

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

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

9 голосов
/ 04 сентября 2011

2) Подходят ли функциональные языки для приложений типа Business / 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 для вашего общего программирования приложений.)

8 голосов
/ 04 мая 2009
  1. Да, азот является хорошим примером функциональной веб-инфраструктуры. Масштабируется также.

http://nitrogenproject.com/

4 голосов
/ 05 мая 2009

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

3 голосов
/ 06 мая 2009

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

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

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

3 голосов
/ 04 мая 2009

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

3 голосов
/ 04 мая 2009

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

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

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

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

0 голосов
/ 04 мая 2009

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

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

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

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

...