Чи актуальне функціональне програмування для веб-розробки? [зачинено]


88

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

У мене неправильний кінець палиці? Чи функціональне програмування абсолютно не пов'язане з веб-розробкою? Якщо ні, чи є якісь приклади його використання "для Інтернету"?

Відповіді:


31

Кілька прикладів:

  • Yahoo! Магазин працює від Lisp (спочатку він називався Viaweb до придбання)
  • Reddit повністю прототипували в Lisp, хоча вони перейшли на Python в 2005 році
  • Hacker News повністю написаний Arc (діалект Ліспа)

7
Yahoo! Магазин був переписаний на c ++ кілька років тому.
apg

5
мова! = парадигма програмування.
phkahler

58
Дивний вибір прикладів ... Yahoo! Магазин написав Пол Грем, який є великим прихильником Ліспа. Він також написав Hacker News, який фактично є клоном Reddit. Імовірно, HN був написаний дещо у відповідь на перехід Reddit з Lisp на Python, тоді як хлопці Reddit були частиною YCombinator: програми-прискорювача, якою керує Пол Грем. Я б зарахував це як один приклад, а не три.
Brandon Bloom

Конфігурація сервера @ShermPendley, налаштування мережі та доступ до бази даних також є основними факторами продуктивності. Час виконання сценарію веб-додатків, як правило, незначна частка загальної вартості.
AgmLauncher

62

Функціональне програмування дуже добре відповідає веб-програмам. Веб-програма отримує запит HTTP і створює результат HTML. Це можна вважати функцією від запитів до сторінок.

Порівняйте з настільними програмами, де у нас, як правило, тривалий процес, користувальницький інтерфейс та потік даних у декількох напрямках. Це більше підходить для ОО, який стурбований об'єктами зі станом та передачею повідомлень.


20

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


20

Чисто функціональне програмування може не дуже добре відображатись у середовищі веб-програмування. Але основною перешкодою є лише відсутність інфраструктури (фреймворків та API). Мине довгий час (мабуть, ніколи, чесно), поки функціональна мова не отримає такого насиченого середовища веб-програмування, як Java, Python або Ruby.

Тим не менш, є кілька варіантів.

У мене немає жодного досвіду з жодним із них. Можливо, коментатори можуть зважити, що для них добре вийшло.



4

Для Clojure існує цікавий стартап (TheDeadline), який розроблений за допомогою Clojure та Google App Engine. Вони мають хороший ppt на Slideshare та інтерв’ю на InfoQ.

Для гарної дискусії щодо розгортання Clojure з GAE: http://news.ycombinator.com/item?id=1239788

Наскільки мені відомо, Clojure має кілька бібліотек веб-розробки. Compojure Ring Conjure

Сподіваюся, це відповідає на деякі ваші запитання =) (Я тільки починаю ..)

Краще, Райане


3

Це абсолютно не пов'язано з веб-розробкою. Додаток, що сидить на сервері, цілком може скористатися функціональними функціями, такими як закриття, функції вищого порядку, незмінність, посилальна прозорість ... наприклад, ви впевнені, що у вас є колекції, які вам потрібно перетворити або маніпулювати будь-яким способом. Тут допомагає функціональне програмування, і саме тому його ідіоми проникають у основні мови. Функціональні функції допомагають у стислості, перевіряемості, розпаралелюванні, а також можуть забезпечити власне рішення проблем, які ви інакше вирішували б за допомогою шаблонів.

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


3

Перевірте Ur / Web . Це дуже швидко, і його статичний тип системи знає про такі речі, як HTML та SQL, тому може гарантувати всілякі приємні речі щодо безпеки.


3

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

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

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



2

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


2

Javascript (мова веб-частини FE, а також все частіше і BE) сам по собі не функціональний, але функції є функціональними першого порядку


2

Щойно ми запустили електронну таблицю, де бекенд повністю написаний на Erlang.

http://hypernumbers.com

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


2

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


1

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

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


1

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

Застереження: Я там працюю.


1

Функціональні мови можуть не бути безпосередньо корисними для створення чудових програм, але ми використовуємо парадигму функціонального програмування для створення наших додатків. Чисте функціональне програмування ставить обмеження "відсутність побічних ефектів". Це гарантує, що чисто функціональні виклики дадуть однаковий результат у будь-якому порядку, коли вони називаються. Це не ідеально для веб-розробки, але якщо функціональне програмування поєднується із системою, що змінює стан, можна створити надійну веб-програму. Подивіться на мою статтю, щоб дізнатись більше: FAST Server Також ці слайди .


0

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

Чи варто? це залежить від проблеми, яку ви вирішуєте. Функціональне програмування - це парадигма програмування, і де ви повинні ним користуватися, залежить від проблеми, яку ви вирішуєте.

Щоб зробити рішення простішим, подумайте, чи простіше вирішити якусь проблему за допомогою концепцій ООП, де інкапсуляція, поліморфізм, функції успадкування можуть спростити ваше життя?

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

Це просто різні стилі побудови структури та елементів програм, тому все полягає у використанні правильного інструменту для правильної роботи. Відпочинок можна зробити будь-чим, використовуючи що завгодно.

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

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

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

• WebSharper (F #)

• Snap (Haskell)

• Підйомник (Scala)

• Ocsigen (OCaml)

• Чиказький бос, Zotonic (erLang)

Сподіваюся Отже моя відповідь допоможе будь-кому.


-2

Ймовірно, ви не будете ним користуватися і не повинні ним користуватися, але коли ви говорите, що хтось завжди знайде виняток із правила (Viaweb тощо). В основному не існує "супер мови", є лише робочі рядки коду, як правило, в "Blub". Навіть Пол Грем каже, що головною (насправді лише) перевагою Lisp є здатність людини швидко створювати прототипи.

Також "супер мови" зазвичай заважають, а не збільшують читабельність коду, це означає, що той "геній", який написав його, повинен підтримувати його вічно, оскільки ніхто інший не може його зрозуміти, тим більше, що він, швидше за все, напише його на своєму власному модифікованому діалекті. Це зменшує можливий обсяг будь-якого проекту, а це означає, що навіть якщо можна робити нові, інноваційні речі, вони не підлягають розширенню і тому залишаються у відносно невеликому масштабі (як Hacker News in Arc).

Це не означає, що хтось не може мати геніальну ідею і реалізувати її в незрозумілому стилі, який потім можна переписати в Blub і розширити, щоб багато людей могли отримати від цього користь. Власне, це саме те, що сталося у всіх історіях успіху Ліспа, не кажучи вже про кожного відомого філософа, який коли-небудь жив. Але звичайно, якщо ви «геній», ви можете також прототипувати свій продукт іншим способом.

Що стосується FP на JVM, то можливо, але круто. Хоча я б особисто використовував його лише для прототипування, цілком можливо, у вас може бути варіант використання (як правило, щось спільне з багатопоточністю), де це забезпечує певне поліпшення.


1
Насправді Пол Грехем каже, що великою перевагою Лісп є те, що це "найпотужніша" мова. Він підтверджує свою аргументацію тим, що щось на зразок чверті viaweb (за рядками) - це макроси Lisp. Метапрограмування на більшості мов (особливо тих, що були доступні в середині 90-х) є складним. Це не прототип, якщо його надсилають на робочий сервер.
nmichaels
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.