2013-08-11 13 views
11

Mam doświadczenie w C# i JavaScript i pracuję od kilku lat z Node.js. Zasadniczo jestem bardzo pewny tego środowiska, ale jeden język zawsze wpadał mi w oko: LISP. Uważam, że jest to imponujące i fascynujące, jak ekspresyjny jest LISP, biorąc pod uwagę jego minimalne koncepcje językowe. Zasadniczo jest tak jak w przypadku jQuery: Zrobić więcej za mniej ;-)Jak utworzyć aplikację internetową za pomocą LISP?

Niestety, moje doświadczenia z LISP są mniej lub bardziej teoretyczne i trochę zabawne, ale nie poważne programowanie.

Teraz chciałbym to zmienić, ale zdecydowanie poświęcam się rozwijaniu aplikacji internetowych (stąd Node.js). Moim problemem jest nieuczenie się LISP-a jako języka, moim problemem jest to, że nie wiem, gdzie i jak zacząć od aplikacji "Hello LISP world", która jest , a nie oparta na konsoli, ale oparta na sieci.

Więc moje pytanie jest w zasadzie: Jak mogę napisać aplikację internetową po stronie serwera w LISP, który jest podobny do poniższego node.js aplikacji

var http = require('http'); 
http.createServer(function (req, res) { 
    res.end('Hello world!'); 
}).listen(3000); 

bez konieczności stosowania wielu dodatkowych ram i bibliotek i takie tam, i tak dalej?

W jaki sposób doświadczony programista LISP rozwiązałby to zadanie? Jakieś wskazówki?

+0

Może powinieneś rozważyć użycie CGI. – Aneri

+0

Cóż, tak, to może być pomysł - choć nie podoba mi się "wtyczkowe" podejście CGI. Ale może to być pomysł ... dzięki za wskazanie tego! –

+2

powinieneś prawdopodobnie sprawdzić: http://stackoverflow.com/questions/556456/is-it-feasible-to-do-serious-web-development-in-lisp –

Odpowiedz

19

Gdy masz SBCL i Quicklisp zainstalowany

(ql:quickload "hunchentoot") 
(hunchentoot:start 
    (make-instance 'hunchentoot:easy-acceptor :port 3000)) 
(hunchentoot:define-easy-handler (foo :uri "/bar") (name) 
    (format nil "[email protected][ ~A~]!" name)) 

Następnie wizyta

http://127.0.0.1:3000/bar?name=World 
9

Odpowiedź o Hunchentoot jest naprawdę droga na początek, a ja w pełni polecam spróbować.

Jedyną istotną różnicą w stosunku do wariantu node.js jest to, że Hunchentoot jest synchronicznym serwerem WWW. Jeśli chcesz uzyskać to samo asynchroniczne zachowanie (właściwie to dlaczego, ale to jest dla innej dyskusji;), musisz spróbować czegoś innego, na przykład wookie. Podobny przykład Hello World jest dostępny pod numerem documentation page.

+1

Dzięki za wzmiankę o Wookie! Polecam również Hunchentoot na początek. Model synchroniczny jest około 5 razy łatwiejszy do obejrzenia. Tam, gdzie Wookie naprawdę się świeci, kiedy potrzebujesz aplikacji do łączenia różnych elementów (wywoływanie wewnętrznych lub zewnętrznych interfejsów API za pośrednictwem HTTP, uruchamianie zapytań do bazy danych, pobieranie wartości z redis, kolejkowanie większych zadań na tło itd.) Wszystko, co wymaga sieć we/wy). Nie ma za zadanie wykonywać "pracy" poza kodowaniem/dekodowaniem i przekazywaniem danych. Uważaj też, brakuje wsparcia dla sterowników asynchronicznych. Twój ulubiony DB prawdopodobnie nie jest wspierany (jeszcze) – andrew

8

Tak jak w przypadku innych odpowiedzi, istnieje również gonitwa 1 i jaskiniowiec 2, które również są przyzwoicie udokumentowane. Ningle routing jest bardzo podobny do Sinatra/Flask.

+1

Dobrze się bawiłem z Cavemanem. Poleciłbym go każdemu. –

Powiązane problemy