Можно ли сделать (серьезное) веб-разработку в Lisp?

Очевидно, что можно писать практически любые приложения практически на любом языке программирования, особенно в таком мощном, как Lisp (будь то Scheme или Common Lisp). Но практично ли использовать его для веб-разработки? Если да, то что должно быть хорошей отправной точкой? Где можно найти подходящие ресурсы (инструменты, библиотеки, документацию, лучшие практики, примеры и т.д.) Для такого проекта?

Ответ 1

Да, веб-разработка сегодня является сильной стороной Common Lisp.

  • Как веб-сервер, используйте Hunchentoot, ранее известный как tbnl, доктор Эдмунд Вейц.

    Вы можете запустить его как фоновый сервер для Apache с использованием mod_proxy в качестве обратного прокси-сервера или в качестве автономного сервера.

  • Различные варианты генерации HTML доступны из шаблонов стиля PHP до Lisp макросов для XSLT. Просто сделайте выбор.

    HTML-TEMPLATE является одним из примеров.

  • Closure XML доступен для синтаксического анализа XML, сериализации, XPath 1.0, XSLT 1.0. Существует также Closure HTML для разбора суффикса HTML-тегов.

    (Полное раскрытие: я являюсь хранителем XML Closure и Closure HTML.)

  • Если вам нравится, Parenscript может сделать ваш JavaScript более незаметным, но вы также можете написать простой старый JavaScript самостоятельно, Конечно.

    Еще одно замечательное решение для улучшения JavaScript в jwacs, которое написано в Common Lisp и преобразует JavaScript для добавления поддержки продолжения.

  • Для проектов веб-служб может потребоваться HTTP-клиент в дополнение к серверу.

    Drakma - это библиотека, используемая для этого сегодня.

    PURI полезен для манипуляции с URI.

    И есть еще! Одной отправной точкой является cliki, например cliki.net/web.

В Интернете никто не знает, что ваш сервер написан в Common Lisp: -)

Ответ 2

Веб-разработка в Common Lisp эффективна и увлекательна.

Некоторые примеры:

CL-WHO позволяет писать HTML, не забывая при этом закрывать тег.

Weblocks позволяет декларативно определять формы со встроенной проверкой:

(defview signup (:type form :caption "Sign up")
  (username :satisfies #'valid-username)
  (password :present-as dual-password :parse-as dual-password)
  (receive-newsletter-p :present-as checkbox :parse-as predicate))

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

cl-prevalence - невероятно простая альтернатива SQL.

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

Самые важные проекты с открытым исходным кодом CL на самом деле имеют отличную поддержку сообщества.

Ответ 3

Есть несколько веб-фреймворков для веб-разработки. Посмотрите:

Если вы хотите хорошо поддерживаемые инструменты lisp, вам нужно будет заплатить за них. Там просто не очень большое сообщество вокруг инструментов с открытым исходным кодом, поэтому они не имеют того же уровня документации/принятия, как, скажем, Django на Python.

Вот некоторые коммерческие lisp продукты:

Также стоит отметить, что Reddit был первоначально построен в Lisp, но позже авторы перешли на Python, сославшись на отсутствие хорошо используемых и документированных библиотек. (ссылка)

Ответ 4

Я не могу говорить с другими фреймворками, но мне очень повезло с помощью Hunchentoot для веб-сервера (он отлично работает самостоятельно, или вы можете установить его за Apache). Что действительно заставляет его сиять (это, вероятно, станет для кого-то шоком) - это библиотеки!

  • Используйте CL-WHO, чтобы написать легкий HTML-код в синтаксисе lisp
  • Parenscript позволяет писать код, который компилируется в javascript
  • Для подключения к базе данных используйте Postmodern, чтобы поговорить с PostgreSQL

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

Ответ 5

Чтобы еще больше помочь развеять миф о том, что нет веб-фреймворков Lisp, вот те, о которых еще не упоминалось:

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

Я не использую и не поддерживаю никаких веб-фреймворков. Я предпочитаю создавать веб-приложения, объединяя вместе ортогональные инструменты (Дэвид Лихтеблау упомянул о некоторых хороших), используя шаблоны проектирования таким образом, который действительно подходит для приложения, которое вы строите, и это тот подход, который я рекомендую. Общий Lisp обеспечивает как множество таких инструментов, так и непревзойденную способность их комбинировать.

Адам Петерсен опубликовал отличный вводный учебник о том, как начать создавать веб-приложения Lisp в этом стиле в прошлом году:

http://www.adampetersen.se/articles/lispweb.htm

Ответ 6

Я думаю, что можно сказать "да" без особого шума.

  • одним из первых HTTP-серверов был cl-http

  • Схема людей вокруг DrScheme потратила на это замечательное количество времени:

  • www.franz.com работает на своем собственном веб-сервере (AllegroServer) и webframework (webactions)

  • Если у вас есть сомнения, проверьте общие пакеты lisp от Edi Weitz. Они обычно работают.

Итак, да, можно сделать "серьезное" веб-программирование с помощью Common Lisp. В свою очередь, я, в свою очередь, в настоящее время не решил следовать примеру Common lisp или Ruby on Rails. Я предпочитаю как над чем-то .NET....

Ответ 7

компания Paul Graham Viaweb написал продукт в Common Lisp, который впоследствии стал Yahoo Shops. По-видимому, Yahoo впоследствии переписал его на С++. Для Lisp progamming существует немало веб-ресурсов.

Ответ 8

В разделе этот вопрос можно найти материал о инструментах для Lisp веб-приложений.

Возможно, также стоит прослушать Qaru Podcast 27, где ребяты Reddit немного рассказывают о своем опыте запуска веб-сайта на Lisp (и их переход на Python).

Ответ 10

Мнения различны. Общая мудрость: лучше использовать другой язык, или, скорее, другой веб-стек, такой как LAMP,.NET, Ruby on Rails, Java. Известным успешным веб-проектом в lisp был Пол Грэм ViaWeb. Reddit изначально реализован в lisp, но затем переключается на python. Если вы решите использовать lisp, попробуйте книгу Seibel: Практическое общее Lisp.

Ответ 11

Посмотрите на Allegro Common Lisp. В нем есть несколько библиотек, в том числе веб-сервер, специально для веб-разработки.