Чи можливо зробити (серйозну) веб-розробку в Ліспі? [зачинено]


99

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


2
Залежить від того, що ви маєте на увазі під "практичним". Можливо, так. Практична, напевно, не для більшості. Чи плануєте ви розміщувати свій сайт? Чи збираєтесь ви керувати власним виділеним вікном, де ви матимете кореневий контроль? Скільки зусиль ви готові докласти до цього?
серцевина

Леонардо, я зараз складаю книгу на цю тему і хотів би отримати зворотній зв'язок від веб-розробників, які цікавляться Lisp. Якщо ви хочете, можете, будь ласка, повідомити мені, як ви прийшли до ідеї використання Lisp, і що ви хотіли б побачити в такій книзі? vsedach@gmail.com
vsedach

@chris - нещодавно я створив хостинг схем для деяких моїх побічних проектів; було простіше, ніж я думав, що це буде - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison

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

Співробітники googlers: у приголомшливому списку CL є новіші та найновіші відповіді .
Переконатись,

Відповіді:


82

Так, веб-розробка є однією з сильних сторін Ліса.

  • В якості веб-сервера використовуйте Hunchentoot , раніше відомий як tbnl, доктором Едмундом Вайцом.

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

  • Доступні різноманітні рішення для генерації HTML - від шаблонів у стилі PHP до макетів хапків Lisp до XSLT. Просто візьміть свій вибір.

    HTML-TEMPLATE - один із прикладів.

  • Закриття XML доступне для розбору, серіалізації XML, XPath 1.0, XSLT 1.0. Існує також закриття HTML для розбору супів тегів HTML.

    (Повне розкриття: я підтримую XML закриття та HTML закриття.)

  • Якщо вам подобається, Parenscript може зробити ваш досвід JavaScript ще дужче, але ви також можете написати звичайний старий JavaScript.

    Ще одне прикольне рішення для підвищення JavaScript у jwacs , яке написано на Common Lisp та перетворює JavaScript для додавання підтримки.

  • Проекти веб-служб можуть вимагати клієнта HTTP на додаток до сервера.

    Drakma - це бібліотека, яку сьогодні використовують для цього.

    PURI корисний для маніпуляцій з URI.

    І є більше! Один вихідний пункт - кліки, наприклад cliki.net/web .

В Інтернеті ніхто не знає, що ваш сервер написаний загальним Lisp :-)


1
і це лише для звичайних ліс і лише один набір інструментів ...
Аттіла Лендвай


1
@MattBall woof. яп. виють.
несинхронізований

В Інтернеті ніхто не може почути крик вашого сервера lisp.
kd4ttc

31

Розробка веб-сайтів у Common Lisp є ефективною та цікавою.

Деякі приклади:

CL-WHO дозволяє писати HTML, не забуваючи ніколи закриваючи тег.

Веб-блоки дозволяють декларативно визначати форми із вбудованою валідацією:

(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 - неймовірно проста альтернатива SQL.

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

Насправді, найбільш важливі проекти з відкритим кодом CL мають відмінну підтримку громади.


19

Існує кілька веб-рамок для веб-розробки. Подивіться на:

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

Ось кілька комерційних лісп-продуктів:

Варто також зазначити, що Reddit спочатку був побудований у Ліспі, але пізніше автори перейшли на Python, посилаючись на відсутність добре використаних та документованих бібліотек. ( посилання )


Він каже, що бібліотеки були "найбільшою проблемою", але безпосередньо до цього він сказав, що "reddit не працюватиме на моєму Mac"; У той час для Mac був лише один потоковий CL для Mac, який не міг запустити їх низькорівневий код сокета. Це звучить як принаймні стільки, що зловмисник.
Кен

3
Я великий шанувальник Lisp, він замінює Python для мене. Але я працюю в C ++. Я можу знайти інших програмістів Python, які зрозуміють прототипи Python, але поки теперішнє відродження Ліспісу не має більшого успіху, я не можу використовувати його на роботі без нескінченних питань "чому ти не використовував Python чи Ruby?"
Аарон

10

Я не можу розмовляти з іншими рамками, але мені дуже пощастило використовувати Hunchentoot для веб-сервера (він прекрасно працює самостійно, або ви можете поставити його за Apache ). Що насправді змушує сяяти (це, мабуть, для деяких стане шоком) - це бібліотеки!

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

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


Чи знаєте ви що-небудь, що зробить LISP взаємодіючим з MongoDB?
MadPhysicist

9

Щоб надалі допомогти розвіяти міф про відсутність веб-рамок Lisp, ось такі, про які ще не було сказано:

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

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

У минулому році Адам Петерсен опублікував чудовий вступний посібник про те, як розпочати створення веб-додатків Lisp у цьому стилі:

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


8

Я думаю, що можна сказати так без особливих зусиль.

  1. одним з перших серверів HTTP був cl-http

  2. Схеми люди навколо DrScheme витратили на неї значну кількість часу:

  3. www.franz.com працює на власному веб-сервері (AllegroServer) та веб-кадрах (веб-сайти)

  4. Якщо ви сумніваєтесь, перевірте загальні пакети Lisp від Edi Weitz. Вони зазвичай працюють.

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


4

Компанія Viaweb Пауля Грема написала продукт у Common Lisp, який згодом став Yahoo Shops. Очевидно, Yahoo згодом переписав це на C ++. Для запуску програми Lisp існує досить багато веб-ресурсів.


1
Якщо це правда щодо Yahoo, деякі можуть сприймати це як збій CL як веб-мови. Але я вважаю це успіхом CL як мови веб-прототипування.
gcbenison

3
Я навряд чи вважав би переписання провалом, як заявив сам Пол Грехем у примітках про "Побиття середніх": "У січні 2003 року Yahoo випустив нову версію редактора, написану на C ++ та Perl. Важко сказати, чи програма ні Однак більше написано в Lisp, оскільки для перекладу цієї програми на C ++ вони буквально повинні були написати інтерпретатора Lisp: вихідні файли всіх шаблонів, що генерують сторінки, все ще є, наскільки я знаю, кодом Lisp. "
протист

viaweb не був прообразований у звичайному Lisp для того, щоб переписати на іншій мові, c ++. Виробники цього призначені для написання та запуску в Lisp через різні очевидні причини, які він заявив, потужність мови, швидке, так, прототипування і швидке виробництво, він добре знав Lisp і т. д. вони запускають його з версією, яку вони написали в lisp, частини цього фактично були в Lisp. після того, як його придбали, згідно з чутками, вони її переписали, я не впевнений. це вибір набувача, який навіть міг би звитись у vbasic або pascal fortran.
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: Практичний звичайний Lisp .


1
Будь-який шанс, що ви могли б додати трохи більше FUD до вашої публікації?
jrockway

@Yuval має рацію. Це загальна мудрість. Reddit зробив комутацію. Я думаю, що пост запитує, чи є якась правда за цією загальною мудрістю.
Стів Роу

1
@jrockway та Стів Роу - Загальна мудрість є чомусь причиною. Я не думаю, що це FUD. Я не чув про успішний веб-сайт, написаний у LISP з часів ViaWeb. Будь ласка, виправте мене, якщо я помиляюся. Я вважаю, що мову програмування слід використовувати відповідно до їх достоїнств, а не за ідеологією.
Юваль Ф


0

Погляньте на Allegro Common Lisp. У ньому є деякі бібліотеки, включаючи веб-сервер, спеціально для веб-розробки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.