Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

"I hope the Clojure guys change things."

In many ways, Clojure seems like a deliberate response to each of the common complaints against Lisp.

    Lisp is old and moldy. It must be primitive by today's standards.
Hard to call Clojure "old" when it's only been around a couple years.

    The exciting languages to learn now are Python, Ruby, Groovy, etc.
Clojure has been very successful at building nerd "street cred." It has latched onto the fascination with functional programming for parallel applications, for one. It also makes use of concise syntax for data structure literals, like Python and Ruby, too. Dynamic, etc. etc.

    Lisp is only for artificial intelligence.
Don't think Clojure has this problem.

    Lisp is interpreted and slow.
    Lisp programs page heavily, so they're even slower.
Clojure gets the performance benefits of running on the highly tuned JVM, with tricks like type hints to get close to Java speeds for critical portions of code. Worst case, you can always drop into Java as your "assembly" language.

    The parentheses look weird and hard to manage.
Clojure mixes up () with [] {} to make code easier to mentally parse.

    Lisp uses prefix notation for things that every other popular language
    does with infix notation, which is just very weird. (And it leads to
    more parentheses.)
No change here.

    Lisp is too big.
    Lisp is too hard to learn.
Clojure is pretty small and doesn't take much time to get started.

    Lisp is all about lists and recursion; that's all you do with it.
Some might start to think "Clojure is all about functional programming." Don't know if that's good or bad.

    I don't know which implementation to use.
There's only one Clojure implementation.

    It isn't "batteries included" (that is, it's not easy to get set up with all the tools and libraries you need).
You get all the libraries written for Java.

    I don't like Emacs, and you can't use Lisp without Emacs.
I use Emacs, which is also great for Clojure, so I can't judge how easy it is to program in Clojure without Emacs.

    Lisp isn't useful for my career; few potential employers want it.
You might be able to sneak Clojure into a Java shop.


No offense but I don't think you get the concept of batteries included. Python has batteries included, Clojure has batteries available.

Even the clojure contrib jar is not included by default and has to be downloaded separately and then clojure needs to be launched with extra command line arguments to setup the classpath properly (or you need to fiddle with the classpath from within clojure), the same goes for any Java library that you want to use.


Except for the classes in the JDK. That gives you networking, file I/O, string processing, regex, Swing GUIs, JDBC, ZIP compression, some XML processing, among other things.

Even by itself, that is better than most Lisps out there, if not enough to make a Pythonista happy. The problem with this stuff is usually the painful verbosity of Java necessary to use it, but you can wrap away that pain very quickly with Clojure.

I do take the point about needing to fiddle with the classpath for any other Java code you want to use. But for me the Java classpath system holds up better than most other software deployment mechanisms. Usually, you just download a jar file, drop it on your classpath, and it just works. I think jar files are an unappreciated success story of the Java ecosystem. Clojure has functions to easily add jars to the classpath at runtime, which is even better, but I find it does not always work seamlessly for me.


FYI, your "Lisp uses prefix notation for things that" line is causing the window to wrap verrry wide. Could you please edit it? (Thanks in advance.)


I kind of like Clojure but several things I find a bit disturbing: 1. A very subjective one - not enough parenthesis - take fo example "cond" operator - it accepts pairs condition-operation without extra parens around each pair. Well, it looks nice for small "cond"'s but for bigger ones it is both inconvenient and error prone - if off by 2 exprssion, fo some reason - yo'll get completely crewed up behavior. There several other syntactical things I find artistically impressive but technologi cally justified. 2. Another thing - I miss "setf" - in somke places mutability can be a way for smaller code especially in case of VM without tail-recursion. 3. It is way biased towarda concurency, it was in fact engineered for concurency - well I sometimes a lot more dirtiy but fasterr solutions. 4. I think that great attractivenes of Lisp's is that you can craft your own in less then a month. No pain with lex/yacc, antlr etc. Just make a simple reader and focu on semantics.




Consider applying for YC's Winter 2027 batch! Applications are open till November 2.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: