Recs.
Updated
SpecsUpdate
Pros
Pro Tries to solve problems as simply as possible
Simplicity is one of the pillars on which Clojure is built. Clojure tries to solve many problems in software development as simply as possible. Instead of building complex interfaces, objects or factories, it uses immutability and simple data structures.
Pro Cleanly compiles to JVM, JavaScript, and .net
Clojure's syntax/API are designed to interact well with the environment of a host language, meaning it's pretty easy to write code which runs without modification on all three platforms. Plus, you can directly interact with code on the host language, and switch out your code based on which host language you use.
Pro Immutability is the default
Clojure programmers are highly encouraged to use immutable data in their code. Therefore, most data will be immutable by default.
State change is handled by functions (for transformations) and atoms (an abstraction that encapsulates the idea of some entity having an identity).
Pro Namespace-qualified syntax quoting
Clojure neatly sidesteps the Lisp-1 vs Lisp-2 argument. Functions in Clojure don't need a separate namespace like Common Lisp, so you can avoid funcalls when using higher-order functions. This makes it feel like a Lisp-1. Clojure's syntax quote automatically includes the current namespace to help avoid collisions in macros, giving you the benefits of a Lisp-2.
Pro Sweet spot in enterprise applications and data manipulation
Most of what enterprise applications do is copy and transform data from A to B. Clojure's immutable data structures and operations for transforming fit that like a glove. The Clojure style of using plain maps instead of classes for everything simplifies many problems.
Pro Sweet spot in enterprise applications and data manipulation
Most of what enterprise applications do is copy and transform data from A to B. Clojure's immutable data structures and operations for transforming fit that like a glove. The Clojure style of using plain maps instead of classes for everything simplifies many problems.
Cons
Con Slow startup time
Application startup is slow due to Clojure's namespace initialization and JVM's class loading overhead. Some variants like ClojureScript are faster to load. GraalVM Native Image is also an option, but can be cumbersome to configure.
Con Data structure fragmentation
Clojure mixes all sorts of data structures into common syntax, including (but not limited to) vectors, hash tables, and sets. This breaks up the uniformity of Lisp and suddenly introduces a lot of complexity to deal with these other data structures. Now, Clojure has kind of addressed this problem and has made functions that deal with data structures in an agnostic way, but the lack of uniformity is still clear as day and it makes the language more complex at a fundamental level than other Lisps.
Con Syntax can be alien / jarring for those used to other Lisps
Perhaps some may consider this attribute an advantage. Clojure does not attempt to maintain significant compatibility with other Lisps. So, if you already know a Lisp or are used to the way Lisp works in general, you'll probably be confused if you take a look at Clojure. See these resources for more details on this subject:
Con Non-Copyfree License (EPL)
The Eclipse Public License is a business-friendly weak-copyleft license.