Like most other Lisps, Clojure's syntax is built on S-expressions that are first parsed into data structures by a reader before being compiled.[20][16] Clojure's reader supports literal syntax for maps, sets and vectors along with lists, and these are compiled to the mentioned structures directly.[20] Clojure treats code as data and has a Lisp macro system.[21] Clojure is a Lisp-1 and is not intended to be code-compatible with other dialects of Lisp, since it uses its own set of data structures incompatible with other Lisps.[21]
Clojure advocates immutability and immutable data structures and encourages programmers to be explicit about managing identity and its states.[22] This focus on programming with immutable values and explicit progression-of-time constructs is intended to facilitate developing more robust, especially concurrent, programs that are simple and fast.[23][24][16] While its type system is entirely dynamic, recent efforts have also sought the implementation of a dependent type system.[25]
The language was created by Rich Hickey in the mid-2000's, originally for the Java platform; the language has since been ported to other platforms, such as the Common Language Runtime (.NET). Hickey continues to lead development of the language as its benevolent dictator for life.