For Common Lisp, the web server of choice would probably be Hunchentoot[1]. If you're using it directly, that would be similar to some of the more lightweight frameworks from other languages (Sinatra, Flask etc.). If you're looking for a bigger framework, Weblocks[2] could be of interest. Haven't worked with it myself, though. It does use Parenscript[3], which is a pretty neat way of writing JavaScript without dropping down to C syntax.
Common Lisp has pretty good support regarding books, libraries and developer mindshare in the Lisp community (which generally is quite fractured, albeit not on a Forth level). They can be pretty harsh at times, though.
Personally, I'd recommend going with some simple examples. Getting to grips with the language, the environment (probably Emacs+Slime) and a somewhat novel web framework at once can be pretty daunting. So taking baby steps on the result level, i.e. making stuff that could've been done with CGIs, won't heap yet another helping of novelties on your plate.
Well, Clojure has Compojure & Ring (like Sinatra & Rack on Ruby). Pretty well made, but without batteries, and the documentation sucks massively (I've resorted to reading the source). Also, pretty much everything is still in beta and APIs change frequently.
I recently rebuilt my site[1] in Clojure. Ring at the bottom layer (basically a given). Beyond that I'm using Moustache[2] for routing, Enlive[3] for templating and Clutch[3] to talk to CouchDB. I had previously tried with Compojure and Hiccup.
The hardest parts were learning enlive and moustache. Enlive is incredibly powerful and very clever, but can be a bit overwhelming for clojure noobs. You definitely want to check out David Nolen's tutorial[5] for it. Aside from that, #clojure and the ring google group are full of wisdom.
Deployment wise, I build the site with a basic leiningen[6] uberjar and run it from an ssh, background it and disown it. yeah, thats terrible, but im lazy and nobody visits my site anyhow ;) Caveat here: Clojure 1.2 has a small bug with interned keywords[7] that will knock my site over in a couple of days if i forget to start it up with the default JVM profile. the -server profile fixes the trigger issues
Aside from that, I have an nginx gateway server that handles serving my media, nowww redirection and proxies all dynamic requests through to the jvm. the site itself hosts a jetty HTTP server via ring to handle all the requests.
The 'hardest' part of getting started with clojure vs say Python+Django or Ruby+Rails is that there is a lack of 'get you going' magic / tools like scaffolds or djangos admin. Once you get past that though, it is a very enjoyable platform inspite of the API changes.
First up, i'm using CouchDB, so my data is pretty fluid. Everything is organized as a set of 'fragments' which have a variety shapes; its duck-typed data basically. I havent looked at clojure's SQL stuff at all so i cant answer there.
Working with these fragments is real simple. Clutch deserializes the JSON from various couch views into native clojure data structures (maps, vecs, etc). From there i just use multimethods[1] to work out how to handle each fragment at various points (url generation, various aspects of the templating etc). I should note that cgrand created a great little macro for me to make working with enlive and multis easier, http://gist.github.com/432752
The hardest part about migrating the nominal schema is changing the JS for the views. Clutch does support running a clojure view server for couch which i think would actually alleviate a lot of my pain points but I wasn't on the ball when i got started. I store all my views in little JS files in the project and have some shamefully rough clojure scripts to update the views in the DB.
Migrating existing data (which i've only had to do once) is a simple case of writing a map (and or filter) function and running it over all the content and doing a bulk update with couch.
I havent had to do much migration though because i largely ported over my established python/django project.
well it was incredibly informative (thanks!), but you do not have the problem of schema changes.
In a traditional DB, one needs to manage addition and deletion of columns, during the development of a project. And one needs to be able to synchronize these database schema changes with the rest of the team.
And it is nice to have these as incremental (yes there is the obvious waste of creating a column in one migration and dropping it in the other)
Migrations also allow you to do stuff like add indexes etc to your tables and is not just a one-to-one mapping of your objects to the DB.
Which is why migrations (Rails and Django's South) are so extremely helpful during development.
One of the things I that was for something like Linq (Scala has something called squeryl) and you could have your database created from your objects - not optimal, but enough to start with.
FWIW, ease of managing incremental schema is why Drupal (using drush and "Drupal Features" ) is one of the better PHP frameworks.
http://github.com/nex3/arc/blob/master/help/arc.arc is from Anarki, a community-maintained branch of "vanilla" Arc. They wrote such a help function, but there are also other extensions and differences that are reflected in said help.
Very interested to see what the experts have to say about this. I gave it a shot a few weeks ago, but I could barely get to hello world. As a Ruby/Python programmer, I seem to be spoiled by having de facto interpreters (MRI and CPython, respectively) with rich standard libraries, all of which are doused with a great quantity of Google juice.
I was startled to find that "C lisp"--that is, the lisp interpeter written in C, which you get when doing sudo aptitude install clisp on the latest Ubuntu distribution--is actually not the "standard" lisp interpreter. I still have no idea which is, if any.
Still, it seemed like a few of the web frameworks out there should have worked anyway, so I tried to soldier on for a while. Unfortunately, it was in vain: my dependency-fu simply wasn't strong enough. I also couldn't find a lisp equivalent to rack and wsgi, which is something of a non-starter imho.
I'm sure I am making some foolish assumptions, facilitated by the vast chasm that represents my experience with lisp and its ilk. I also have only managed to devote a few hours to it so far, so please, no one take this post as gospel--I'm just sharing what little I have found in case someone else finds it useful.
Lisp is not really a language. It's a family of languages. That's why you can't find a standard implementation.
Clisp is one implementation of the Common Lisp language. Other Common Lisp implementations include SBCL and AllegroCL. Since no one party controls the Common Lisp language, none is standard.
Scheme is another Lisp language. It also isn't controlled by anyone, so it's just a sea of implementations. BUT — the closely related Racket language is centrally controlled and does have a standard implementation. In fact, that's pretty much the whole reason Racket diverged from Scheme — so that it could be the standard Racket instead of Scheme with a bunch of modifications.
The other popular Lisp these days is Clojure. Like Racket, it does have a central "creator," Rich Hickey, whose implementation is considered official.
Interestingly Racket and Clojure were the last two languages I decided to pick from when I decided to start to learn lisp a few weeks ago. The impression I got from reading about Common Lisp on the 'net was that it was old, its libraries are hard to find, and when you find them they are poorly documented and unmaintained. And if you're not using emacs to write it, no one is going to help you. I've installed several versions of emacs on my computer... but decided in the end I didn't really want to learn lisp and emacs at the same time because it didn't seem fun anymore, just work.
At least there are more blogs about Clojure; and Racket is mature and well supported. (I also think Clojure code looks better than all the other lisps. Don't know why, yet.)
On the other hand you could try Scheme, particularly Racket (ex PLT Scheme) - http://racket-lang.org/ (IDE is really nice, but sometimes confusing for newbies.. for example "Which Scheme? And why?")
Real morons never admit their mistakes, and are hardly self-critical. I suspect you're a fake, wannabe-moron: i.e. a closeted intelligent person, with human decency.
CLISP is not really written in C proper; but files with *.d suffix are C with heavy pre-processor use that make them look like Pascal. It also uses "var" keyword to declare new variables, along with shell-style # line comments. It also uses German for variables and comments. Things have been changing heavily as of late, and there is more push toward C style and English usage, but here is what it look(s|ed) like.
I don't program anything serious with Lisp', just toying around for what seems to be forever (having friends/colleagues that don't program in same language doesn't help - in fact, it alienates me from Lisp even further). Clozure and PLT..er Racket Scheme for me, but if I were to try web development or anything more serious than just toying around I'd definitely go with something JVM based for libraries support, if nothing else.
For Scheme, I find that fcgi[1] does the trick: not only is it supported by Apache, lighttpd, etc., but you get state-preservation between requests; which is touted, for instance, as one of the benefits of continuation-based servers[2].
I've shied away from Scheme-based servers[3] hosted behind e.g. forward-proxies, because it seems to violate Occam's razor; but that's a personal bias.
If I am using SBCL, then Hunchentoot. If I am using Franz, then I would use Portable AllegroServe and WebActions, both of which are installed and ready to use.
RESTAS is actually one of the CL frameworks that I can sort of recommend because it doesn't try to do too much, and it doesn't have any continuation brain damage in it.
I think this depends a lot on what you're looking for. I love lisp, but I wouldn't bet a startup on it. Ruby/Rails is simply too complete to use something else.
Bliss could come from a combination of the two, however.
I disagree; Clojure on Google App Engine is a pretty solid platform for web development,and by now there's a lot of online help to get you started.
But your first sentence says it all - depends on what you're looking for. If you're outside of the cloud (by choice or necessity) Ruby/Rails, Python/Django, or even Groovy/Grails are all tough to beat.
Common Lisp has pretty good support regarding books, libraries and developer mindshare in the Lisp community (which generally is quite fractured, albeit not on a Forth level). They can be pretty harsh at times, though.
Personally, I'd recommend going with some simple examples. Getting to grips with the language, the environment (probably Emacs+Slime) and a somewhat novel web framework at once can be pretty daunting. So taking baby steps on the result level, i.e. making stuff that could've been done with CGIs, won't heap yet another helping of novelties on your plate.
[1]: http://weitz.de/hunchentoot/
[2]: http://common-lisp.net/project/cl-weblocks/
[3]: http://common-lisp.net/project/parenscript/