Steve Yegge's most recent post takes a right angle turn about a third of the way through, and begins a comparison of Emacs Lisp and JavaScript.
And the winner is ... Clojure!
OK, Steve didn't say that. What he did do was call out things he liked about JavaScript and Emacs Lisp.
For JavaScript:
- momentum
- (namespace) encapsulation
- delegation (polymorphism?)
- properties (by Steve's definition)
- serialize to source
For Emacs Lisp:
- Macros
- S-Expressions
I first picked up Clojure looking for many of the same things that Steve wants. I found them. Clojure can do all the things on both lists above. (Serialize to source isn't formal yet, but check the mailing list. And of course, you will have to judge "momentum" for yourself.)
The scary thing is that Clojure wins the language war before you even learn about its signature features. When I started exploring Clojure, I quickly realized it had everything I wanted, which could be summarized as "Lisp that really embraces the Java platform."
Then Clojure changed the definition of what I wanted. Now I also want
- persistent data structures
- functional programming
- STM and agents
If you have half an hour, watch a compelling vision of what software development will look like in 2010.
Comments
I’ll second that. Being a predominantly Java programmer I was quite skeptical of dynamically typed languages when people started telling me that I can be more productive with them. Then, I realized that the most important aspect of a program is the dynamic aspect: its run time behavior.
Once this thought has sunk in, it became evident that it will be much easier to develop programs in a language that lets you directly interact with its objects. Clojure, being also functional, is a great language.
I think that the fact that the Clojure is written for the JVM platform gives it a significant edge over Ruby, for example. Interoperability with external code is much easier when you deal with objects. The JVM bytecode is like an object-oriented machine language thereby allowing Clojure to offer seamless integration with JDK, third party library, etc. The importance of this cannot be overestimated.