Простейший способ запустить приложение «Здравствуй, мир» на Лиспе - PullRequest
8 голосов
/ 30 декабря 2010

Я хочу написать веб-приложение на Лиспе просто для удовольствия. Я нашел этот вопрос о веб-приложениях на Lisp, но все ответы кажутся такими сложными. После просмотра ссылок, приведенных в ответах, решения кажутся действительно сложными.

Если я просто хочу простое веб-приложение Lisp "hello world", разве нет простого способа сделать это?

Ответы [ 8 ]

6 голосов
/ 30 декабря 2010

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

Есть пара действительно замечательных книг по Common Lisp с главами введения в веб-приложение: Практический Common Lisp и Land of Lisp .

В Land of Lisp есть глава, в которой рассказывается о создании простого веб-сервера с использованием сокетов. Это довольно элементарно, но я думаю, что это послужило бы отличной отправной точкой для приложения Lisp "hello world".

Глава в Practical Common Lisp находится на более высоком уровне и работает с полноценным сервером под названием Allegro Serve. Более поздние главы посвящены созданию приложения для потоковой передачи MP3.

Практический Common Lisp доступен бесплатно, вот интересующая глава: http://gigamonkeys.com/book/practical-web-programming-with-allegroserve.html

Я думаю, что обе книги являются отличным ресурсом для того, чтобы начать с Common Lisp (как с того, кто только начинает себя), хотя Land of Lisp немного более доступный и более увлекательный, хотя и охватывает некоторые интересные проблемы, такие как ленивая оценка и поиск деревьев игры. Практический Common Lisp более ... практичен, но это не так уж и плохо. Он предназначен для профессиональных программистов, поэтому его тон немного серьезнее.

Одно предупреждение:

AFAIK Common Lisp не имеет действительно стандартного способа сетевого программирования, поэтому это одна из областей изучения Lisp, где вы начинаете сталкиваться с проблемами, если не выбираете ту же реализацию, что и книга, которой вы оказались чтение.

Land of Lisp повсюду использует CLisp, но вы можете использовать SBCL, если будете следовать этому посту поблизости: http://blog.ciaranbradley.com/crossing-the-streams-land-of-lisp-chapter-12-0

Практический Common Lisp использует Allegro Serve, как я уже сказал, и я думаю, что есть версия Allegro Lisp, доступная на их сайте для использования с книгой. Однако вы также можете использовать Portable Allegro Serve . Будьте осторожны, если вы используете Mac OS X и SBCL (как и я): поддержка потоков SBCL является экспериментальной на OS X, поэтому, если вы идете по этому пути, лучше всего установить Ubuntu на виртуальную машину, а затем apt-get install sbcl и выполнить ваше программирование Allegro Serve там, где потоки SBCL лучше поддерживаются. Возможно, некоторые мастера CL могут предложить другие советы здесь. Это как раз то, что сработало для меня.

6 голосов
/ 30 декабря 2010

Для CL-HTTP можно загрузить сервер в Лисп и выполнить:

(defun hello-world (url stream)
  (http:with-successful-response (stream :text)
    (princ "hello world" stream)))

Выше функция ответа . Функция ответа имеет два аргумента: URL и поток. Функция response добавляет обычные заголовки ответа и сообщает, что возвращает текст. В рамках этого мы просто печатаем строку в выходной поток.

(http:export-url #u"/hello-world"
                 :computed
                 :response-function 'hello-world)

Свыше экспортирует URL , который объединяется с контекстом по умолчанию (имя сервера и порт по умолчанию). #U - это макрос чтения для создания объектов URL. URL экспортируется как: COMPUTED и, следовательно, для вычисления ответа требуется: RESPONSE-FUNCTION. Мы передаем функцию, которую мы определили выше.

Когда клиент отправляет запрос GET с URL-адресом на этот сервер, он вызывает функцию ответа для этого URL-адреса и предоставляет поток вывода.

Который затем генерирует это содержание:

CL-USER 4 > (http:show-raw-url #u"/hello-world")

Status Code: 200 (OK)
Server Version: http/1.1
Date: Wed, 29 Dec 2010 23:39:52 GMT
Server: CL-HTTP/70.218 (LispWorks; 2.1.8)
Content-Type: text/plain; charset=ISO-8859-1
Transfer-Encoding: chunked

hello world

Вот и все.

2 голосов
/ 03 января 2011

Простой Hello World должен быть с hunchentoot и cl-who.

(defparameter *httpd*
  (hunchentoot:start
   (make-instance 'hunchentoot:acceptor
                  :port 8080)))
(princ "Hunchentoot started on port ")
(princ *httpd-port*)
(terpri)

(hunchentoot:define-easy-handler (hello-world (:uri "/hello"))
    ()
  (with-html-output (*standard-output* nil :indent t)
       (:html
              (:head
                 (:title "Hello World"))
              (:body
                 (:p "Hello world!...")))))

Для получения дополнительной информации: http://weitz.de/hunchentoot/, http://zaries.wordpress.com/2010/11/09/lisp-web-server-from-scratch-using-hunchentoot-and-nginx/

Чтобы установить hunchentoot, используйте quicklisp (это самый простой).

  (ql:quickload :hunchentoot)
2 голосов
/ 30 декабря 2010

PLT Racket - очень полнофункциональный диалект Scheme, который может сделать это.У них есть простое учебное пособие здесь , в котором они разрабатывают небольшую CMS, и некоторое обсуждение веб-сервера Racket здесь .На вашем месте я бы попробовал это.Их «привет мир» выглядит следующим образом:

(define (start request)
 '(html
   (head (title "My Blog"))
   (body (h1 "Under construction"))))

Видите, это не так уж и плохо!

(Если Clojure считается Лиспом, конечно, есть несколько фреймворков веб-приложений в различных состоянияхразвития для него.)

1 голос
/ 30 декабря 2010

Взгляните на " Создание небольшого проекта на Лиспе с использованием quickproject и Quicklisp " для примера, несколько более сложного, чем "Hello World".

1 голос
/ 30 декабря 2010

Здесь - недавняя статья о создании простого веб-приложения в Common Lisp.

0 голосов
/ 30 декабря 2010

Ну, я не совсем уверен, что вы подразумеваете под "веб-приложением".Когда я связываю динамический сайт, я обычно работаю в CGI-мышлении.Вот ссылка на установку CGI для Common Lisp http://www.cl -user.net / asp / jf8v / sdataQvStnw8XWwrFDQ3xCR8X8yBX8yBXnMq = / sdataQu3F $ sSHnB ==

* 1005Конечно, большинство веб-работ на Лиспе сосредоточены вокруг веб-сервера, построенного на Лиспе, вместо того, чтобы Apache или IIS обращались к программному обеспечению Лисп для анализа файла .lisp.
0 голосов
/ 30 декабря 2010

Вот пост в блоге , который настраивает SBCL и Hunchentoot для обслуживания страницы hello-world.

Я не буду утверждать, что это лучший способ настроить веб-приложение, но онодовольно просто.

...