Возможна ли (серьезная) веб-разработка на Лиспе? [закрыто]


100

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


2
Зависит от того, что вы подразумеваете под словом «практичный». Возможно, да. Практично, наверное, не для большинства. Планируете ли вы разместить свой сайт на хостинге? Собираетесь ли вы управлять своим собственным выделенным ящиком, где у вас будет root-контроль? Сколько усилий вы готовы приложить для этого?
core

Леонардо, сейчас я готовлю книгу по этой теме и хотел бы получить отзывы от веб-разработчиков, интересующихся Lisp. Если хотите, дайте мне знать, как вы пришли к идее использования Lisp и что бы вы хотели увидеть в такой книге? vsedach@gmail.com
vsedach 05

@chris - Недавно я установил хостинг Scheme для некоторых своих сторонних проектов; это было проще, чем я думал - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison

2
Пойдите, прочтите эссе Пола Грэма. Я сомневаюсь, что он что-то упустил при обсуждении использования LISP для веб-приложений, к тому же он отличный писатель. paulgraham.com/avg.html его домашняя страница: paulgraham.com/index.html
Келли С. Френч

Товарищи гуглеры: в потрясающем списке CL есть больше и актуальных ответов .
Ehvince

Ответы:


82

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

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

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

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

    HTML-TEMPLATE - один из примеров.

  • Замыкание XML доступно для синтаксического анализа XML, сериализации, XPath 1.0, XSLT 1.0. Также есть Closure HTML для разбора супа HTML-тегов.

    (Полное раскрытие: я сопровождаю Closure XML и Closure HTML.)

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

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

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

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

    PURI полезен для манипулирования URI.

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

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


1
и это только для обычной шепелявости и только одного набора инструментов ...
Аттила Лендвай,


1
@MattBall гав. трепло вой.
несинхронизировано

В Интернете никто не может услышать крик вашего шепелявого сервера.
kd4ttc

31

Веб-разработка на 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 с открытым исходным кодом действительно имеют отличную поддержку сообщества.


19

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

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

Вот несколько коммерческих продуктов Lisp:

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


Он действительно говорит, что библиотеки были «самой большой проблемой», но прямо перед этим он сказал, что «reddit не будет работать на моем Mac»; в то время для Mac существовала только одна многопоточная CL, которая не могла запускать код низкоуровневого сокета. Это звучит как минимум не менее выгодно.
Кен

3
Я большой поклонник Lisp, он заменяет мне Python. Но я работаю на C ++. Я могу найти других программистов Python, которые поймут прототипы Python, но до тех пор, пока нынешнее возрождение Lisp не будет более успешным, я не могу использовать его на работе без бесконечных вопросов: «Почему вы не использовали Python или Ruby?»
Аарон

11

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

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

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


Известно ли вам что-нибудь, что сделает LISP совместимым с MongoDB?
MadPhysicist

9

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

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

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

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

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


8

Я думаю, что можно сказать «да» без особых хлопот.

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

  2. Схема, которую люди из DrScheme потратили на нее много времени:

  3. www.franz.com работает на собственном веб-сервере (AllegroServer) и веб-фреймворке (веб-действия)

  4. Если вы сомневаетесь, проверьте распространенные пакеты lisp от Эди Вейца. Обычно они работают.

Так что да, с Common Lisp можно заниматься «серьезным» веб-программированием. Я, со своей стороны, в настоящее время не решился пойти по пути Common Lisp или Ruby on Rails. Я предпочитаю и то, и другое .NET ....


4

Компания Пола Грэма Viaweb написала продукт на Common Lisp, который впоследствии стал Yahoo Shops. Судя по всему, Yahoo впоследствии переписал его на C ++. Существует довольно много веб-ресурсов для программирования на Лиспе.


1
Если это правда в отношении Yahoo, некоторые могут посчитать это провалом CL как веб-языка. Но я бы увидел в этом успех CL как языка веб-прототипирования.
gcbenison

3
Я бы не стал считать переписывание неудачным, как сказал сам Пол Грэм в заметках о превышении средних показателей: «В январе 2003 года Yahoo выпустила новую версию редактора, написанную на C ++ и Perl. Трудно сказать, является ли программа не тем не менее, они больше написаны на Лиспе, потому что для перевода этой программы на C ++ им буквально пришлось написать интерпретатор Лиспа: исходные файлы всех шаблонов, генерирующих страницы, по-прежнему, насколько мне известно, являются кодом Лиспа ».
protist

Viaweb не был прототипирован на обычном lisp, чтобы переписать его на другом языке, c ++. его разработчики предназначены для написания и запуска на лиспе из-за различных очевидных причин, заявленных им, мощности языков, быстрого, да прототипирования и быстрого производства, он очень хорошо знал лисп и т. д. они запускают его с той версией, которую они написали на лиспе, на самом деле части были на лиспе. после того, как ahoo приобрел его, они, по слухам, переписали его, я не уверен. это выбор покупателя, он может даже писать на базовом или паскаль-фортране.
sçuçu

2

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

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


2

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


1
Есть ли шанс, что вы могли бы добавить немного больше FUD в свой пост?
jrockway

@ Юваль прав. Это общая мудрость. Reddit переключился. Я думаю, что в этом посте спрашивается, есть ли правда за этой общей мудростью.
Стив Роу

1
@jrockway и Стив Роу - Общепринятая мудрость не зря. Я не думаю, что это FUD. Я не слышал об успешных веб-сайтах, написанных на LISP, со времен ViaWeb. Пожалуйста, поправьте меня, если я ошибаюсь. Я считаю, что язык программирования следует использовать в соответствии с их достоинствами, а не идеологией.
Yuval F


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.