Lisp Web Frameworks? [closed]

旧街凉风 提交于 2019-11-28 15:16:12
Matthias Benkard

PLT Scheme features a built-in, continuation-based web server.

Update: PLT Scheme is now called Racket.

Hunchentoot is also quite widespread

What is Weblocks?

Weblocks is a continuations-based web framework written in Common Lisp.

http://common-lisp.net/project/cl-weblocks/

Most (perhaps all) of the well-known Common Lisp web frameworks have already been mentioned, so I'll just add some comments.

Hunchentoot is not a "web framework" in the sense that most people mean. It's an HTTP server (an extremely good one).

Drew Crampsie's "Lisp on Lines" looks extremely promising, but I'm not sure how far along it is. I've been waiting to hear an announcement.

Marco Baringer's UnCommon Web runs on many of the prominent CL implementions: Allegro CL, CMUCL, Clozure CL (formerly known as OpenMCL), GNU clisp, and SBCL. The only major one missing is LispWorks; I don't know if that means it hasn't been tested to work, or is known not to work, or what; but if it runs on all those other dialects, it's probably easy to make it run on any other.

For Clojure you can try Compojure.

Common Lisp

A lot of the usual suspects (Hunchentoot, UCW, LoL) have already been mentioned. Franz makes available for Allegro Common Lisp (and ported to other Lisps):

  • at a lower level (handling HTTP requests yourself), AllegroServe.
  • at a higher level (more of a "framework"), WebActions.

Both are open source. I tend to use AllegroServe, factoring out utilities as I need them, but some people really like WebActions.

I used Araneida for quite some time, and I prefer its style to AllegroServe, but it hasn't been maintained since 2006.

I've searched quite extensively for a good web framework for Lisp, and I found them all to be somewhat inaccessible. The Architecture of UCW didn't seem very natural to me (I can't remember why; it's been a while since I looked into it), and KPAX isn't maintained anymore (I think).

Symbolic web looks very interesting, and I think Weblocks is the most interesting, but Weblocks isn't very well documented and can be pretty intimidating to the newcomer. SymbolicWeb was immature last time I looked, but it may have grow up some since then. The features page looks pretty good today.

There are different approaches you could take. If you want a purely lisp approach, then you could:

  • If you can read code proficiently and understand continuations, you might try Weblocks with a Hunchentoot backend (Weblocks has a dependency on Hunchentoot that hasn't been abstracted yet). There is supposed to be a real user manual out in a month or two, but as with any OSS project, such commitments are sketchy.
  • Similarly, you might try SymbolicWeb. [update: nevermind, the project is no more]
  • roll your own. Seriously - there's cl-who to help with HTML generation, there are javascript and json libraries available, usockets, elephant, cl-sql, hunchentoot, aserve, and lots of utility libraries that you could bake together.

If you are ok with a hybrid approach, this is something I'm experimenting with at the moment: I've written a Lisp JSON-RPC backend for Qooxdoo, so I can serve up pure javascript frontends through a superfast http server like Cherokee and let Cherokee farm out connections to as many backend json-rpc servers running in Lisp as I want. Very, very scalable. I'm far from figuring out the kinks and challenges, but it was pretty straight-forward to get working. the json library makes it stupid simple to get the backend working - Qooxdoo itself is actually harder, I think (but I'm not a JS developer, really).

I'm also going to be checking out WebActions from allegro, because there's a certain allure to the availability of paid support - not to mention that Allegro may be the best CL implementation available (His Kennyness uses it :-)).

UnCommonWeb (UCW) is often mentioned http://www.common-lisp.net/project/ucw/ -- it's not REST as is in en-vogue at the moment, more like Smalltalk's SeaSide (but then again, SeaSide is quite en-vogue).

Lisp-on-lines is a web application framework built on top of CLSQL and UCW and provides an application development model similar in many ways to Ruby on Rails. Right now it can be found at http://versions.tech.coop/lisp-on-lines/.

http://www.cliki.net/lisp-on-lines

http://kevin.casa.cavewallarts.com/LISP/LOL/lol.html

For Clojure you can try Webjure.

I just discovered a web framework called Clack for common lisp and found it quite easy to get started.

See http://clacklisp.org/

Quote from it's web site "Clack is a web application environment for Common Lisp inspired by Python's WSGI and Ruby's Rack."

and caveman is a micro web framework based on Clack.

Another cool (yet far from "popular") thing to look at is SymbolicWeb -- http://groups.google.com/group/symbolicweb

Re: SymbolicWeb (and its exaggerated demise)

SymbolicWeb project page at Gitorious and SymbolicWeb article at Wikipedia. The Google Groups page is definitely dead (and unarchived?,) but the Gitorious tree shows checkins as recently as 29 April 2010. The project page also refers to "some running examples" being "occasionally available" at nostdal.org (which is unreachable as I write this, reinforcing the "occasionally" qualifier :-) .)

(Note: I'm not a SymbolicWeb user. I just tracked down the SymbolicWeb links while reading this thread.)

Restas is another web framework that has seen recent updates:

http://restas.lisper.ru/en/

Its overview

RESTAS is a Common Lisp web application framework. Its key features are:

RESTAS was developed to simplify development of web applications following the REST architectural style.

RESTAS is based on the Hunchentoot HTTP server. Web application development with RESTAS is in many ways simpler than with Hunchentoot, but some knowledge of Hunchentoot is required, at least about working with hunchentoot:*request* and hunchentoot:*reply*.

Request dispatch is based on a route system. The route system is the key concept of RESTAS and provides unique features not found in other web frameworks.

The other key RESTAS concept is its module system, which provides a simple and flexible mechanism for modularized code reuse.

Interactive development support. Any RESTAS code (such as the definition of a route, a module or a submodule) can be recompiled at any time when you work in SLIME and any changes you made can be immediately seen in the browser. No web server restart or other complicated actions are needed.

SLIME integration. The inner structure of a web application can be investigated with the standard "SLIME Inspector." For example, there is a "site map" and a simple code navigation with this map.

Easy to use, pure Lisp web application daemonization facility based on RESTAS and SBCL in Linux without the use of Screen or detachtty.

RESTAS is not an MVC framework, although it is not incompatible with the concept. From the MVC point of view, RESTAS provides the controller level. Nevertheless, RESTAS provides an effective and flexible way for separation of logic and representation, because it does not put any constraints on the structure of applications. Separation of model and controller can be effectively performed with Common Lisp facilities, and, hence, doesn't need any special support from the framework.

RESTAS does not come with a templating library. cl-closure-template and HTML-TEMPLATE are two good templating libraries that can be used with RESTAS.

This question is a bit old but I thought I'd share my recent discovery: the Hop language which is based on Scheme and is quite complete.

HOP is a multi-tier programming language for the Web 2.0 and the so-called diffuse Web. It is designed for programming interactive web applications in many fields such as multimedia (web galleries, music players, ...), ubiquitous and house automation (SmartPhones, personal appliance), mashups, office (web agendas, mail clients, ...), etc.

HOP features:

  • an extensive set of widgets for programming fancy and portable Web GUIs,
  • full compatibility with traditional Web technologies (JavaScript, HTML, CSS),
  • HTML5 support, a versatile Web server supporting HTTP/1.0 and HTTP/1.1,
  • a native multimedia support for enabling ubiquitous Web multimedia applications,
  • fast WebDAV level 1 support,
  • an optimizing native code compiler for server code,
  • an on-the-fly JavaScript compiler for client code,
  • an extensive set of libraries for the mail, calendars, databases, Telephony, ...
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!