Является ли функциональное программирование актуальным для веб-разработки?

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

  • HAppS - сервер веб-приложений Haskell
  • Серверные страницы Haskell
  • Links - функциональный язык веб-программирования
  • mod_caml - модуль OCAMl CGI для Apache
  • Ocsigen/Eliom - веб-сервер OCAMl/структура программирования
  • OPA - платформа коммерческих веб-приложений
  • Yesod - веб-инфраструктура для Haskell

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

Ответ 5

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

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

Ответ 6

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

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

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

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

Бест, Райан

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 11

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

Ответ 12

Язык и парадигма не важны для веб-приложений, все они одинаково хороши и плохи. Если вы ищете причину для изучения новой парадигмы, просто погрузитесь в нее. Моим советом было бы проанализировать проблему, которую вы пытаетесь решить, и выбрать соответствующий набор инструментов.

Ответ 13

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

Ответ 14

Мы только что запустили онлайн-таблицу, где бэкэнд полностью написан в Erlang.

http://hypernumbers.com

По любым стандартам это одно из самых сложных веб-приложений, которые вы можете построить с помощью ginormous GUI с умственной сложностью.

Ответ 15

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

По крайней мере, моя причина.

Ответ 16

Еще один короткий ответ: http://www.mlstate.com - полная платформа для веб-разработки, основанная на FP. Чистая семантика языка позволяет проводить все виды автоматизированного анализа безопасности, оптимизации и т.д.

Предостережение: я там работаю.

Ответ 17

Функциональные языки не могут быть непосредственно полезны для создания больших приложений, но мы используем парадигму функционального программирования для создания наших приложений. Чистое функциональное программирование ставит ограничение "без побочных эффектов". Это гарантирует, что чистые функциональные вызовы принесут тот же результат в том, что они называются. Это не идеально подходит для веб-разработки, но если функциональное программирование сочетается с системой изменения состояния, можно создать надежное веб-приложение. Взгляните на мою статью для более подробной информации: FAST Server Также эти slides.

Ответ 18

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

Тебе следует? это зависит от проблемы, которую вы решаете. Функциональное программирование - это парадигма программирования, и то, где вы должны ее использовать, зависит от решаемой проблемы.

Чтобы упростить решение, подумайте, проще ли решить какую-то проблему с помощью концепций ООП, где инкапсуляция, полиморфизм, наследование, как функции, могут сделать вашу жизнь проще?

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

Это просто разные стили построения структуры и элементов программ, так что все дело в использовании правильного инструмента для правильной работы. Остальное можно сделать с помощью чего угодно.

Функциональное программирование в веб-разработке:

JavaScript поддерживает функциональное программирование, и он очень поддерживает, когда мы находимся в контексте веб-разработки. Платформа React сильно зависит от принципов функционального программирования и используется во многих веб-приложениях.

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

• WebSharper (F #)

• Snap (Haskell)

• Лифт (Scala)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

Надеюсь, так что мой ответ поможет любому.

Ответ 19

Вероятно, вы не будете использовать его и не должны его использовать, но когда вы скажете, что кто-то всегда найдет исключение из правила (Viaweb и т.д.). В принципе нет "суперязыков", есть только рабочие строки кода, обычно в "Blub". Даже Пол Грэм говорит, что основная (по сути, только) польза для Lisp - это одна из возможностей быстрого прототипа.

Кроме того, "суперязыки" обычно поражают, а не повышают читаемость кода, а это означает, что один "гений", который написал его, должен поддерживать его навсегда, поскольку никто не может его понять, тем более, что он, скорее всего, напишет его в своем собственном модифицированный диалект. Это уменьшает возможный объем любого проекта, а это означает, что даже если новые инновационные вещи могут быть сделаны, они не расширяемы и поэтому остаются в относительно небольшом масштабе (например, Hacker News in Arc).

Нельзя сказать, что у кого-то не может быть гениальной идеи и реализовать ее в непостижимом стиле, который затем может быть переписан в Blub и расширен, чтобы многие люди могли извлечь из этого выгоду. Собственно, именно то, что произошло во всех историях успеха Lisp, не говоря уже о каждом известном философе, который когда-либо жил. Но, конечно, если вы "гений", вы также сможете прототипировать свой продукт по-другому.

Что касается FP на JVM, возможны ограниченные, но интересные вещи. Хотя я лично использовал бы это только для прототипирования, возможно, у вас может быть прецедент (как правило, что-то делать с многопоточным), где он обеспечивает некоторое улучшение.