Ist es möglich, (ernsthafte) Webentwicklung in Lisp durchzuführen? [geschlossen]


99

Es ist offensichtlich möglich, fast jede Art von Anwendung in fast jeder Programmiersprache zu schreiben, insbesondere in einer so mächtigen wie Lisp (sei es Scheme oder Common Lisp). Aber ist es praktisch, es für die Webentwicklung zu verwenden? Wenn ja, was sollte ein guter Ausgangspunkt sein? Wo finden Sie die richtigen Ressourcen (Tools, Bibliotheken, Dokumentationen, Best Practices, Beispiele usw.) für ein Projekt dieser Art?


2
Kommt darauf an, was du mit "praktisch" meinst. Möglich ja. Praktisch, wahrscheinlich nicht für die meisten. Planen Sie, Ihre Website zu hosten? Wirst du deine eigene Box betreiben, in der du Root-Kontrolle hast? Wie viel Aufwand sind Sie bereit zu investieren?
Kern

Leonardo, ich stelle gerade ein Buch zu diesem Thema zusammen und möchte Feedback von Webentwicklern erhalten, die sich für Lisp interessieren. Wenn Sie möchten, können Sie mir bitte mitteilen, wie Sie auf die Idee gekommen sind, Lisp zu verwenden, und was Sie in einem solchen Buch sehen möchten. vsedach@gmail.com
vsedach

@chris - Ich habe kürzlich das Schema-Hosting für einige meiner Nebenprojekte eingerichtet. Es war einfacher als ich dachte - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison

2
Lesen Sie die Aufsätze von Paul Graham. Ich bezweifle, dass er in einer Diskussion über die Verwendung von LISP für Webanwendungen etwas übersehen hat, und er ist ein großartiger Schriftsteller. paulgraham.com/avg.html seine Homepage ist: paulgraham.com/index.html
Kelly S. Französisch

Googlerkollegen: Auf der fantastischen CL- Liste finden Sie mehr und aktuellere Antworten .
Ehvince

Antworten:


82

Ja, Webentwicklung ist heute eine der Stärken von Common Lisp.

  • Verwenden Sie als Webserver Hunchentoot , früher bekannt als tbnl, von Dr. Edmund Weitz.

    Sie können es als Back-End für Apache ausführen, indem Sie mod_proxy als Reverse-Proxy oder als eigenständigen Server verwenden.

  • Es stehen verschiedene Lösungen zur HTML-Generierung zur Verfügung, von Vorlagen im PHP-Stil über Lisp-Makro-Hacks bis hin zu XSLT. Treffen Sie einfach Ihre Wahl.

    HTML-TEMPLATE ist ein Beispiel.

  • Closure XML ist für XML-Analyse, Serialisierung, XPath 1.0, XSLT 1.0 verfügbar. Es gibt auch Closure HTML für das Parsen von HTML-Tag-Suppen.

    (Vollständige Offenlegung: Ich bin der Betreuer von Closure XML und Closure HTML.)

  • Wenn Sie möchten, kann Parenscript Ihre JavaScript-Erfahrung lispiger machen, aber Sie können natürlich auch selbst einfaches altes JavaScript schreiben.

    Eine weitere coole Lösung zur Verbesserung von JavaScript in jwacs , die in Common Lisp geschrieben ist und JavaScript transformiert, um die Unterstützung für die Fortsetzung hinzuzufügen.

  • Für Webdienstprojekte ist möglicherweise zusätzlich zu einem Server ein HTTP-Client erforderlich.

    Drakma ist die Bibliothek, die heute dafür verwendet wird.

    PURI ist nützlich für die URI-Manipulation.

    Und es gibt noch mehr! Ein Ausgangspunkt ist Cliki, zum Beispiel cliki.net/web .

Im Web weiß niemand, dass Ihr Server in Common Lisp geschrieben ist :-)


1
und dies ist nur für gewöhnliches lisp und nur einen Satz von Werkzeugen ...
Attila Lendvai


1
@ MattBall Wuff. kläffen. heulen.
unsynchronisiert

Im Internet kann niemand Ihren Lisp-Server schreien hören.
kd4ttc

31

Die Webentwicklung in Common Lisp ist sowohl effektiv als auch unterhaltsam.

Einige Beispiele:

Mit CL-WHO können Sie HTML schreiben, ohne jemals wieder ein schließendes Tag zu vergessen.

Mit Weblocks können Sie Formulare mit integrierter Validierung deklarativ definieren:

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

Es unterstützt AJAX auch vollautomatisch und greift auf normale Links zurück, wenn der Browser dies nicht unterstützt.

Cl-Prävalenz ist eine unglaublich einfache Alternative zu SQL.

In letzter Zeit setzen sehr viele Menschen diese Technologien für geschäftskritische Anwendungen ein - mit Erfolg.

Die wichtigsten CL-Open-Source-Projekte haben tatsächlich eine hervorragende Community-Unterstützung.


19

Es gibt einige Web-Frameworks für die Webentwicklung. Schauen Sie sich an:

Wenn Sie gut unterstützte Lisp-Tools wünschen, müssen Sie dafür bezahlen. Es gibt einfach keine sehr große Community um die Open Source-Tools, daher haben sie nicht den gleichen Dokumentations- / Akzeptanzgrad wie beispielsweise Django unter Python.

Hier sind einige kommerzielle Lisp-Produkte:

Es ist auch erwähnenswert, dass Reddit ursprünglich in Lisp erstellt wurde, die Autoren jedoch später zu Python migrierten, da es an gut genutzten und dokumentierten Bibliotheken mangelte. ( Link )


Er sagt, dass Bibliotheken das "größte Problem" waren, aber kurz zuvor sagte er, "reddit würde nicht auf meinem Mac laufen"; Zu dieser Zeit gab es nur einen Thread-CL für den Mac, auf dem der Socket-Code auf niedriger Ebene nicht ausgeführt werden konnte. Das klingt nach mindestens einem Dealbreaker.
Ken

3
Ich bin ein großer Lisp-Fan, es ersetzt Python für mich. Aber ich arbeite in C ++. Ich kann andere Python-Programmierer finden, die Python-Prototypen verstehen, aber bis die gegenwärtige Lisp-Wiederbelebung mehr Erfolg hat, kann ich sie nicht ohne endlose Fragen bei der Arbeit verwenden. "Warum haben Sie Python oder Ruby nicht verwendet?"
Aaron

10

Ich kann nicht mit anderen Frameworks sprechen, aber ich hatte sehr viel Glück mit Hunchentoot für einen Webserver (es funktioniert von alleine gut, oder Sie können es hinter Apache stellen ). Was es wirklich zum Leuchten bringt (dies wird für manche wahrscheinlich ein Schock sein), sind die Bibliotheken!

  • Verwenden Sie CL-WHO , um müheloses HTML in einer Lisp-Syntax zu schreiben
  • Mit Parenscript können Sie Code schreiben, der in Javascript kompiliert wird
  • Verwenden Sie für die Datenbankkonnektivität Postmodern, um mit PostgreSQL zu sprechen

Was ich an der Verwendung von CL für das Web wirklich mag, ist, dass Sie alles optimieren können, während es ausgeführt wird. Sie haben immer eine REPL, die Ihren Servercode ausführt. Anschließend können Sie eine Verbindung zu dieser REPL herstellen und die Funktionsweise des Codes ändern oder überprüfen, ohne dass Sie etwas stoppen müssen. Ich habe Funktionen neu definiert, während die Site ausgeführt wird. Wenn die Funktion das nächste Mal aufgerufen wird, nimmt sie einfach den neuen Code auf und funktioniert.


Kennen Sie etwas, das LISP mit MongoDB kompatibel macht?
MadPhysicist

9

Um den Mythos, dass es keine Lisp-Webframeworks gibt, weiter zu zerstreuen, sind hier einige, die noch nicht erwähnt wurden:

Offensichtlich scheinen viele Leute zu denken, dass Lisp gut genug ist, um viele Web-Frameworks zu schreiben.

Ich verwende oder unterstütze keine Web-Frameworks. Ich bevorzuge es, Webanwendungen zu erstellen, indem ich orthogonale Werkzeuge (David Lichteblau hat einige gute erwähnt) unter Verwendung von Entwurfsmustern auf eine Weise kombiniere, die tatsächlich zu der Anwendung passt, die Sie erstellen, und das ist der Ansatz, den ich empfehle. Common Lisp bietet sowohl eine Fülle solcher Tools als auch eine unübertroffene Möglichkeit, sie zu kombinieren.

Adam Petersen hat im vergangenen Jahr ein hervorragendes Einführungs-Tutorial veröffentlicht, wie Sie mit dem Erstellen von Lisp-Webanwendungen in diesem Stil beginnen können:

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


8

Ich denke, man kann ohne viel Blendung ja sagen.

  1. Einer der ersten HTTP-Server war cl-http

  2. Die Mitarbeiter von DrScheme haben bemerkenswert viel Zeit damit verbracht:

  3. www.franz.com läuft auf einem eigenen Webserver (AllegroServer) und Webframework (Webactions)

  4. Wenn Sie Zweifel haben, überprüfen Sie die gängigen Lisp-Pakete von Edi Weitz. Sie arbeiten normalerweise.

Also ja man kann mit Common Lisp "ernsthafte" Webprogrammierung machen. Ich für meinen Teil bin derzeit unentschlossen, einer Common Lisp-Route oder Ruby on Rails zu folgen. Ich bevorzuge beides gegenüber allem .NET ....


4

Paul Grahams Firma Viaweb schrieb ein Produkt in Common Lisp, das später zu Yahoo Shops wurde. Anscheinend hat Yahoo es später in C ++ neu geschrieben. Es gibt einige Webressourcen für Lisp-Programme.


1
Wenn dies für Yahoo zutrifft, sehen einige dies möglicherweise als einen Fehler von CL als Websprache an. Aber ich würde es als Erfolg von CL als Web-Prototyping-Sprache ansehen.
Gcbenison

3
Ich würde das Umschreiben kaum als Fehlschlag betrachten, wie Paul Graham selbst in den Notizen zu Beating the Averages sagte: "Im Januar 2003 veröffentlichte Yahoo eine neue Version des in C ++ und Perl geschriebenen Editors. Es ist schwer zu sagen, ob das Programm nein ist länger in Lisp geschrieben, weil sie, um dieses Programm in C ++ zu übersetzen, buchstäblich einen Lisp-Interpreter schreiben mussten: Die Quelldateien aller seitengenerierenden Vorlagen sind meines Wissens immer noch Lisp-Code. "
Protist

viaweb wurde nicht in allgemeinem Lisp prototypisiert, um in einer anderen Sprache, c ++, neu zu schreiben. Es ist beabsichtigt, dass die Produzenten es aus verschiedenen offensichtlichen Gründen, die von ihm angegeben wurden, Sprachkompetenz, Rapid, Yes Prototyping und Rapid Production in Lisp schreiben und ausführen. Er kannte Lisp sehr gut usw. Sie führen es mit der Version aus, die sie haben habe in lisp geschrieben, Teile davon waren tatsächlich in lisp. Nachdem sie es erworben haben, haben sie es laut Gerüchten umgeschrieben, ich bin mir nicht sicher. es ist die Wahl des Erwerbers, sie könnten sogar in vbasic oder pascal fortran wirte.
Sçuçu

2

In dieser Frage finden Sie einige Informationen zu Tools für Lisp-Webanwendungen .

Es könnte sich auch lohnen, sich Stack Overflow Podcast 27 anzuhören, in dem die Reddit-Leute ein wenig über ihre Erfahrungen beim Ausführen einer Website auf Lisp (und ihren Wechsel zu Python) sprechen.


2

Meinungen gehen auseinander. Die allgemeine Weisheit ist: Verwenden Sie besser eine andere Sprache oder einen anderen Webstack wie LAMP, .NET, Ruby on Rails, Java. Das bekannte erfolgreiche Webprojekt in lisp war Paul Grahams ViaWeb . Reddit wurde ursprünglich in lisp implementiert, dann aber auf Python umgestellt . Wenn Sie sich für Lisp entscheiden, probieren Sie Seibels Buch: Practical Common Lisp .


1
Gibt es eine Chance, dass Sie Ihrem Beitrag etwas mehr FUD hinzufügen?
Jrockway

@ Yuval ist richtig. Das ist allgemeine Weisheit. Reddit hat gewechselt. Ich denke, der Beitrag fragt, ob hinter dieser gemeinsamen Weisheit eine Wahrheit steckt.
Steve Rowe

1
@jrockway und Steve Rowe - Gemeinsame Weisheit gibt es aus einem Grund. Ich denke nicht, dass dies FUD ist. Ich habe seit ViaWeb nichts mehr von einer erfolgreichen Website in LISP gehört. Bitte korrigieren Sie mich, wenn ich falsch liege. Ich glaube, Programmiersprache sollte eher nach ihren Vorzügen als nach ihrer Ideologie verwendet werden.
Yuval F


0

Schauen Sie sich Allegro Common Lisp an. Es verfügt über einige Bibliotheken, einschließlich eines Webservers, speziell für die Webentwicklung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.