Имеет ли отношение функциональное программирование к веб-разработке? - PullRequest
84 голосов
/ 15 ноября 2008

В последнее время я так много видел о функциональном программировании, и Clojure выглядит особенно интересно. Хотя я «понимаю» базовое описание того, что это такое, я не могу понять, как бы я использовал его на повседневной основе в качестве веб-разработчика, если смогу вообще. Многое из того, что я прочитал, фокусируется на математической стороне функционального программирования, а не на типичных ситуациях программирования, встречающихся в обычном ОО.

У меня не тот конец палки? Является ли функциональное программирование абсолютно не связанным с веб-разработкой? Если нет, то есть ли примеры его использования «для Интернета»?

Ответы [ 19 ]

61 голосов
/ 15 ноября 2008

Функциональное программирование очень хорошо подходит для веб-приложений. Веб-приложение получает запрос HTTP и выдает результат HTML. Это можно считать функцией от запросов к страницам.

Сравните с настольными приложениями, где у нас обычно есть длительный процесс, интерфейс с отслеживанием состояния и поток данных в нескольких направлениях. Это больше подходит для ОО, который занимается объектами с состоянием и передачей сообщений.

29 голосов
/ 15 ноября 2008

Несколько примеров из головы:

  • Yahoo! Магазин работает на Лиспе (первоначально назывался Viaweb до приобретения)
  • Reddit был полностью прототипирован на Лиспе, хотя они переключились на Python в 2005
  • Hacker News полностью написано на Arc (диалект Lisp)
20 голосов
/ 15 ноября 2008

Чистое функциональное программирование может не очень хорошо отображаться в среде веб-программирования. Но основным препятствием является просто отсутствие инфраструктуры (фреймворки и API). Пройдет много времени (вероятно, никогда, если честно), когда функциональный язык будет иметь такую ​​же богатую среду веб-программирования, как Java, Python или Ruby.

Тем не менее, есть несколько вариантов.

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

20 голосов
/ 15 ноября 2008

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

15 голосов
/ 06 августа 2009

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

Кроме того, веб-фреймворк Lift написан на Scala.

4 голосов
/ 25 октября 2010

Для Clojure есть интересный стартап (TheDeadline), разработанный с использованием Clojure и Google App Engine. У них есть хороший ppt на Slideshare и интервью на InfoQ.

Для хорошего обсуждения развертывания Clojure с GAE: http://news.ycombinator.com/item?id=1239788

Насколько я знаю, у Clojure есть несколько библиотек для веб-разработки. Compojure Кольцо Сотворение

Надеюсь, что это ответит на некоторые ваши вопросы =) (Я тоже только начинаю ..)

Лучший, Ryan

3 голосов
/ 25 октября 2010

Эрланг, похоже, широко используется в некоторых инфраструктурах для масштабируемых веб-приложений. базы данных CouchDB и Riak написаны в основном на Erlang, как и сервер очередей сообщений RabbitMQ. Одним из ключей к его успеху является то, что он обрабатывает параллелизм посредством передачи сообщений без общего изменяемого состояния. Именно такой способ мышления о проблемах полезен больше, чем какой-либо конкретный функциональный язык программирования.

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

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

3 голосов
/ 25 октября 2010

Выезд Ur / Web . Он очень быстрый, и его статическая система типов знает о таких вещах, как HTML и SQL, поэтому может гарантировать все виды приятных вещей о безопасности.

3 голосов
/ 15 ноября 2008

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

Обновление: есть также веб-фреймворки для функциональных языков. Веб-блокировки для Common Lisp, Lift для Scala. Это те, о которых я слышал, может быть и больше ... однако вам не обязательно быть чисто функциональным - например, Scala не является чистым и должен работать с любой средой Java, вы все равно сможете использовать функциональное программирование для бизнес-уровня и т. д.

2 голосов
/ 25 октября 2010

Javascript (язык веб-части FE и все больше BE) не функционирует сам по себе, но функции функционируют в первом порядке

...