Essence Of Clojure

Some ruminations

So I’ve had occasion recently to ponder those things that make Clojure ‘Clojure’. Here’s what I’ve come up with:

Lisp Syntax Plus

Clojure is a Lisp. If it doesn’t have the parens, it’s not Clojure. It also has additional syntax to specify literal vectors, hash-maps and sets. And then there’s the removal of extraneous parens in things like calls to cond.

Immutability

Having the aforementioned collection types be immutable.

Concurrency semantics

Distinguishing between Vars, Refs, Atoms and Agents to allow you to pick the concurrency constructs you need for the task at hand.

Protocols

Though they weren’t in Clojure originally and there are some problems with their implementation, I think the ability to extend existing types with new behavior is important.

What else?

Of course, the Clojure community is a big part of what makes Clojure great, but I’m thinking more in terms of language features here. Have I overlooked anything?

Jim Duey 25 April 2013
blog comments powered by Disqus