What Are the Differences Between Clojure, Scheme/Racket and Common Lisp?
stackoverflow.com
stackoverflow.com
My favourite implementation is Gambit Scheme and I have currently stumbled upon Gerbil (cons.io), a dialect built on top of Gambit. It's just fun to work with.
> I always get confused about which post should go where.
There should be a stack Overflow site, not a faq but site, to discuss which stack Overflow sites are appropriate for a particular post.
although all the interesting and useful questions posted to that site would be flagged as inappropriate for that site.
Clojure supports concurrency very well, and being hosted n the JVM, it is somewhat tailored to web applications. My impression is that it is far less ideal for CPU-bound parallelism which does a lot of computation on primitive types, since when there are more than a few primitive function parameters, they need to be passed as boxed values, which interacts badly with the JIT compiler. In practice, the advantages from support for parallel computation seem to be out-weighted by that. Of course, for concurrent web applications, this does usually not matter.
In contrast, Lisp implementations like SBCL or Chez compile to native code, and they can be as fast as C.
Racket and SBCL are far better for scripting because they have a fast start-up time.
Clojure and Racket have the best Library support which matches the "Batteries included" slogan of Python to some degree. Clojure can access and use all Libraries on the Java platform. In contrast, Racket, SBCL and many other Lisps can access libraries written in C quite easily using the foreign function interface, which is important for numeric and scientific programming. For the latter domain, using the JVM is somewhat a disadvantage.
Racket can also execute Python code (a subset, I think) and call into Python libraries. According to the documentation, it can also call into Python extension modules. If this is correct, the difference in the number of libraries available to Clojure should matter little.
SBCL has less libraries. So far, I was thinking of SBCL as being powerful but a bit bare-bones, similar to C++ when compared to Java. However, one of the comments on stackoverflow mentions that the library situation has changed significantly in the last years.
I am also wondering whether the library aspect might be less important that it seems. Traditional OOP languages put a lot of focus on code reuse in the form of binary code reuse - including libraries which provide objects which can do a lot of things. Java libraries are a prima example for this, and are famous for their heaviness. Lisps, in contrast, and Lisp culture, seem to put more focus on source-code reuse, because they put more emphasis on functional programming. This seems to make binary code reuse somewhat less important.
Quicklisp[1] has made a massive difference to how easy it is to download and manage sets of dependencies in a Lisp project. Try it out :)
I've never used Clojurescript. I'm not sure how easy that is with Node.
However, the notion is technically subsumed within the notion of a "simplified" language, as Scheme continuations are a low level operation quite often used to construct what other languages have out of the box.
I'm not surprised that the answers were not useful.