#functional-programming #clojure #lisp #arc-lisp
#функциональное программирование #clojure #lisp #arc-lisp
Вопрос:
Каковы примеры хорошо разработанных функциональных (в отличие от объектно-ориентированных) веб-приложений, которые делают доступным их исходный код? В настоящее время я изучаюисходники Hacker News, но я хотел бы увидеть несколько других нетривиальных примеров, в идеале в clojure.
Для MVC существует множество приложений Rails и PHP, фреймворков и руководств для изучения — что есть для функционального программирования?
Комментарии:
1. Arc и clojure — едва ли функциональные языки. Взгляните на HappS: happs.org
2. Возможно, поиск «веб-приложений на основе продолжений» может принести вам интересные результаты.
3. Интересный фреймворк и статья — спасибо! Есть ли у вас какие-либо ссылки на реальные реализации этих идей? Например, система магазина на Haskell, CMS на основе продолжений или простое программное обеспечение для ведения блога? Я люблю учиться на проверенных решениях, которые где-то есть.
Ответ №1:
Есть:
- Compojure (clojure)
- Веб-сервер PLT Scheme (PLT Scheme)
- Erlyweb (erlang)
- Seaside (smalltalk)
Этого списка достаточно, чтобы вы были заняты приведением примеров функциональных языков с различными характеристиками:
- Clojure: многопарадигмальный?, гибкий? это не чисто функциональный язык, и хотя предпочтительно, чтобы вы программировали в функциональном стиле, это не является строго необходимым. Вы можете написать ООП в стиле Java через Java interop или абстрагироваться от него, используя несколько методов. В нем много гибкости, хотя еще немного рано говорить, является ли это просто «гибким» или «мультипарадигмальным» в том смысле, в каком это имеет место в common lisp. Разработанный, в частности, как lisp, который легко обрабатывает параллелизм, на самом деле он нацелен на множество целей, отсюда и название flexible или multiparadigm.
- Схема: Будучи ближе к чистому функциональному языку, чем Clojure, он немного сильнее подталкивает программиста к функциональному стилю, чем Clojure.
- Erlang: функциональное программирование, созданное для надежного параллелизма. Erlyweb построен на платформе, которая рассчитана на высокую степень параллелизма.
- Smalltalk: функциональное программирование с высокой степенью OO (даже управляющие структуры являются объектами в объектной системе, а не синтаксическими конструкциями).
Если вы хотите посмотреть, как выглядят веб-приложения на функциональном языке «любой ценой», то стоит обратить внимание на предложение jrockway.
Комментарии:
1. Для ознакомления с веб-сервером PLT Scheme взгляните на docs.plt-scheme.org/continue .
2. Не могли бы вы, пожалуйста, объяснить, почему здесь перечислены веб-сервер PLT Scheme и Seaside? Являются ли их реализации хорошими примерами функционального программирования?
3. @Vijay, оба контролируют взаимодействие между веб-сервером и клиентом с помощью продолжений. Это было бы отличительной чертой функционального подхода к веб-программированию. Одно из описаний этого можно найти в Yahoo! патент на веб-серверы на основе продолжения: google.com /… этот патент получен в результате работы Пола Грэма по написанию того, что впоследствии стало Yahoo! был написан на Lisp еще в середине 90-х. Проверьте также комментарий fortran к исходному вопросу для получения дополнительной информации о веб-серверах на основе продолжения.
4. Ну, насколько я понимаю, продолжения не имеют ничего общего с функциональным программированием.
5. en.wikipedia.org/wiki/Continuation Продолжения — это способ, которым функциональный язык программирования может предоставлять доступ к стеку. Они являются функциональным эквивалентом инструкций goto. Конечно, все зависит от того, что вы имеете в виду, когда говорите «функциональный», и можно ограничить значение этого слова до такой степени, что «функциональным» будет только очень ограниченный набор явлений. Что бы ни двигало вашей лодкой. Однако следует признать, что это вопрос перспективы, и большинство людей будут рассматривать продолжения как особенности «функциональных» языков.
Ответ №2:
Weblocks — проверенный объектно-ориентированный функциональный фреймворк, вдохновленный Seaside.
Он написан на Common Lisp, и два основных примера (weblocks-demo, simple-blog) можно найти здесь: http://bitbucket.org/S11001001/weblocks-dev/src/tip/examples
Комментарии:
1. но это не функционально, смотрите Вопрос выше
Ответ №3:
Если вы ищете реальные проекты с открытым исходным кодом, реализованные на чисто функциональном языке, эта ссылка может помочь: http://haskell-news.blogspot.com/2008/01/top-10-most-popular-haskell-programs.html
Если вы очень разбираетесь в веб-приложениях, пожалуйста, посмотрите на это: http://www.haskell.org/haskellwiki/RPC