Lisp languages have ever since been the pedestal of my professional work. Clojure is the most modern approach of a Lisp, driven mostly by Rich Hickey who wanted a language that is
- a Lisp
- for functional programming
- symbiotic with an established platform
- and designed for concurrency.
Since, by his own words, he couldn’t find one that ticked off all of his wish list points he invented Clojure in 2006.
Clojure is a modern Lisp variant fully symbiotic with Java and runs on the JVM (there is a Version for the Erlang BEAM as well; though that’s to be considered highly experimental). Java can be used to call Clojure functions and Clojure can handle Java Objects with ease. Since it is a Lisp, Clojure is based on S-Expressions and is therefore meant to be transformed through meta programming.
- In its core, Clojure is a very small and easy to learn language
- Functional Idiomatic: strictly immutable and persistent data structures, higher order functions, side effect free programming, dynamic typing
- Full interoperability with all JVM-languages like Java, Kotlin and Groovy
- Support of hot reloading
- Strong concurrency
- Stable core and libraries
- Very strong and stable community
- Lisp languages are not commonly taught and therefore not well known by most software developers; so a system written in Clojure may need a higher onboarding effort for oncoming developers.
- The dynamic type system might add hardness to software correctness proofing. A language like Haskell or Idris might be the better choice here.
- A Lisp alternative to Clojure might be Common Lisp, but is has not nearly as many libraries and frameworks and lacks the strong community.
- Another alternative language on the JVM might be Kotlin for its good built-in functional programming support.