5 ms·
I wonder what would be the advantages of using Clojure without the JVM over, say, Common Lisp. To me, it seems the great advantage of Clojure is its ease of usi
by alberich 14y ago
I wonder what would be the advantages of using Clojure without the JVM over, say, Common Lisp. To me, it seems the great advantage of Clojure is its ease of using the large number of java libraries out there. However, if you take those libraries out, wouldn't a mature Lisp implementation like SBCL be much better?
- amouat 14y agoThere are still some nice things such as destructuring and vectors & maps as base types. The syntax of Clojure is generally a bit cleaner and more concise, though I'm sure some lispers will disagree.
- pjmlp 14y agoThere a few differences that might be worth still. Clojure is a Lisp-1, and provides better data structures as Common Lisp as far as I am aware. But the JVM benefit is a big one indeed.
- alberich 14y agoI thought that, besides the JVM itself, the advantages of Clojure would be its concurrency model - as CL standard doesn't define anything related to this - and its stronger functional approach. I don't fully grasp the advantages of being a Lisp-1 or Lisp-2 :)
- pjmlp 14y ago> I don't fully grasp the advantages of being a Lisp-1 or Lisp-2 :) It has to do with variable scoping. Lisp-1 only accepts lexical scoping, while Lisp-2 also allows for dynamic scoping. http://www.nhplace.com/kent/Papers/Technical-Issues.html http://www.nhplace.com/kent/Papers/Technical-Issues.html
- mahmud 14y agoGood grief. No. Lisp-N has to do with the number of name spaces in the language. Lisp-1s only have ONE environment; the variables range over all values of the language, integers, functions, vectors, symbols, strings. In Lisp-N, there are N namespaces for each "kind" of value. Common Lisp is called a "Lisp-2" because it separates functions from other values. (it's closer to Lisp-5 or even Lisp-7, forgot which, because it allows that many kinds of "names" without collission. Also above you said Clojure "probably" has better data structures than Common Lisp. That is unsubstantiated.
- yoklov 14y agoFor what it's worth, Clojure has implementations of Phil Bagwell's HAMT-based hash-maps, vectors, and sets. These are absolutely amazing data structures, and offer functional updates, a list-like API (O(log_32(n)) for most operations, which ends up being less than seven operations in practice, which is similar enough to O(1) for most programmers). I'm not much of a common lisp programmer (mostly sticking with scheme/racket and Clojure), but I don't think they've been ported to Common Lisp (yet), so the claim that Clojure has better data structures than Common Lisp, while somewhat a matter of preference, isn't entirely unsubstantiated.
- mahmud 14y agoCommon Lisp has hash-tables, vectors, and sets .. had it, in an ANSI-specified document since 1984. The implementation details of these is, well, implementation dependent, be they HAMT or whatever. The language provides a wealth of tools out of the box, but it's the job of the programmer to choose more appropriate tools for the problems at hand. The following is the Common Lisp specification. 12+ implementations, half of them industrial strength, more than half commercial vendors, and everyone of them has to adhere to this spec: http://www.franz.com/support/documentation/8.2/ansicl/ansicl.htm http://www.franz.com/support/documentation/8.2/ansicl/ansicl...
- jules 14y agoNote that CL's data structures are mutable, whereas Clojure's are persistent.
- spacemanaki 14y agoedited bc mahmud said it better, but Also, Clojure supports (optional) dynamically scoped variables.
- FrojoS 14y agoPrototype on the JVM but compile to C for production or performance critical tests? Ideally, no refactoring required at all. I guess it also helps to work with a dialect with more momentum. E.g. its easier to find support, on- and offline. Since I haven't really used Closure or any other Lisp for more than a tutorial, I might be very wrong, though.
- Raphael_Amiard 14y agoClojure -> C will very probably be slower than Clojure -> JVM, at least if the compiler is naive.