2013-08-11 17 views
11

Ho esperienza in C# e JavaScript e ho lavorato negli ultimi anni con Node.js. Fondamentalmente, sono molto fiducioso con questo ambiente, ma una lingua ha sempre attirato la mia attenzione: LISP. Trovo impressionante e piuttosto affascinante l'espressività di LISP, dato i suoi concetti linguistici minimi. Fondamentalmente è come con jQuery: fare di più con meno ;-)Come si crea un'applicazione web usando LISP?

Sfortunatamente, la mia esperienza con LISP è più o meno teorica e un po 'di svago, ma non una programmazione seria.

Ora mi piacerebbe cambiarlo, ma sono decisamente dedicato allo sviluppo di applicazioni Web (da cui Node.js). Il mio problema non è imparare LISP come lingua, il mio problema è che non so dove e come iniziare con un'applicazione "Hello LISP world" che è non basata su console, ma basata sul web.

Quindi, la mia domanda in fondo è: Come potrei scrivere un applicazione web lato server in LISP che è simile alla seguente applicazione Node.js

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

senza la necessità di un sacco di framework e librerie aggiuntive e cose e così via?

In che modo un programmatore LISP esperto può risolvere questo problema? Qualche suggerimento?

+0

Forse dovresti considerare l'utilizzo di CGI. – Aneri

+0

Beh, sì, questa potrebbe essere un'idea - anche se non mi piace l'approccio "plugin" di CGI. Ma potrebbe essere un'idea ... grazie per avermelo fatto notare! –

+2

probabilmente dovresti controllare: http://stackoverflow.com/questions/556456/is-it-feasible-to-do-serious-web-development-in-lisp –

risposta

19

Una volta che avete SBCL e Quicklisp installato,

(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)) 

quindi visitare

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

La risposta su Hunchentoot è in realtà un modo di andare per i principianti, e vi consiglio di provarlo completamente.

L'unica differenza importante rispetto alla variante node.js nella domanda è che Hunchentoot è un server Web sincrono. Se vuoi ottenere lo stesso comportamento asincrono (in realtà, perché lo faresti, ma questo è per un'altra discussione;), devi provare qualcos'altro, come wookie. L'esempio simile di Hello World viene presentato al numero documentation page.

+1

Grazie per la menzione Wookie! Raccomando anche Hunchentoot per i principianti. Il modello sincrono è circa 5 volte più facile da avvolgere. Dove Wookie brilla davvero è quando hai bisogno di un'app per legare pezzi diversi (chiamando API interne o di terze parti via HTTP, eseguendo query di database, acquisendo valori da redis, accodando lavori più grandi allo sfondo, ecc ... tutto ciò che richiede I/O di rete). Non è pensato per fare molto "lavoro" oltre alla codifica/decodifica e il trasferimento dei dati. Attenzione inoltre, manca il supporto per i driver asincroni. Probabilmente il tuo DB preferito non è ancora supportato (allo stato attuale) – andrew

8

Proprio come per completare altre risposte, ci sono anche ningle 1 e cavernicolo 2, che sono anche documentati in modo decente. Il routing Ningle è molto simile a Sinatra/Flask.

+1

Mi sono divertito molto con Caveman. Lo consiglierei a chiunque. –