2013-08-11 13 views
11

Ich habe Erfahrung in C# und JavaScript und habe in den letzten Jahren mit Node.js gearbeitet. Grundsätzlich bin ich sehr zuversichtlich in diese Umgebung, aber eine Sprache hat mich schon immer interessiert: LISP. Ich finde es beeindruckend und ziemlich faszinierend, wie ausdrucksstark LISP ist, angesichts seiner minimalen Sprachkonzepte. Es ist im Grunde wie bei jQuery: Mach mehr mit weniger ;-)Wie erstelle ich eine Webanwendung mit LISP?

Leider ist meine Erfahrung mit LISP mehr oder weniger theoretisch und einige herumspielen, aber nicht ernsthafte Programmierung.

Jetzt möchte ich das ändern, aber ich bin definitiv für die Entwicklung von Webanwendungen gewidmet (daher Node.js). Mein Problem ist nicht LISP als Sprache zu lernen, mein Problem ist, dass ich nicht weiß, wo und wie mit einer "Hallo LISP Welt" -Anwendung, die nicht Konsole-basierte, aber Web-basiert ist.

Also, meine Frage ist im Grunde: Wie könnte ich eine serverseitige Web-Anwendung in LISP schreiben, die für viele Frameworks und zusätzliche Bibliotheken

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

ohne die Notwendigkeit der folgenden Node.js Anwendung ähnlich ist und Zeug und so weiter?

Wie würde ein erfahrener LISP-Programmierer diese Aufgabe lösen? Irgendwelche Hinweise?

+0

Vielleicht sollten Sie in Betracht ziehen, CGI zu verwenden. – Aneri

+0

Nun ja, das mag eine Idee sein - obwohl ich den "plugin" -Ansatz von CGI nicht mag. Aber es könnte eine Idee sein ... danke, dass du darauf hingewiesen hast! –

+2

sollten Sie wahrscheinlich überprüfen: http://stackoverflow.com/questions/556456/is-it-feasible-to-doserious-web-development-in-lisp –

Antwort

19

Sobald Sie SBCL und Quicklisp installiert haben,

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

Dann

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

Die Antwort über Hunchentoot besuchen ist wirklich eine Art und Weise für den Anfang zu gehen, und ich empfehle voll, es zu versuchen.

Der einzige große Unterschied zu der Variante node.js in der Frage ist, dass Hunchentoot ein synchroner Webserver ist. Wenn Sie das gleiche asynchrone Verhalten erhalten möchten (eigentlich, warum sollten Sie, aber das ist für eine andere Diskussion;), müssen Sie etwas anderes versuchen, wie wookie. Das ähnliche Hallo-Welt-Beispiel wird an seiner documentation page entwickelt.

+1

Danke für die Wookie Erwähnung! Ich würde Hunchentoot auch für Anfänger empfehlen. Das synchrone Modell ist ungefähr 5x einfacher, den Kopf herum zu wickeln. Wo Wookie wirklich glänzt, ist, wenn Sie eine App brauchen, um verschiedene Teile miteinander zu verbinden (Aufruf von internen oder 3rd-Party-APIs über HTTP, Ausführen von Datenbankabfragen, Erfassen von Werten aus Redis, Einreihen größerer Jobs in den Hintergrund usw.) alles, was benötigt wird Netzwerk-E/A). Es ist nicht dazu gedacht, viel "Arbeit" zu tun, außer Codierung/Decodierung und Weitergabe von Daten. Achten Sie auch darauf, Async-Treiber-Unterstützung fehlt. Deine Lieblings-DB wird wahrscheinlich (noch) nicht unterstützt – andrew

8

Genau wie andere Antworten ergänzen, gibt es auch ningle 1 und Caveman 2, die auch anständig dokumentiert sind. Ningle Routing ist Sinatra/Flask sehr ähnlich.

+1

Ich hatte eine wirklich gute Zeit mit Caveman. Ich würde es jedem empfehlen. –

Verwandte Themen