&gt; The STM and concurrency features of Clojure are what brought me in, and they certainly haven&#x27;t been &quot;done before&quot;. Common Lisp&#x27;s concurrency story was always poor.<p>It&#x27;s the JVM that does most of the work here for Clojure. You get the same features when working in Java if you wanted them.<p>Most CL implementations provide access to native threads and kernel polling facilities (kqueue, select, epoll, etc).<p>If &quot;modern,&quot; means, &quot;leverages the libraries and implementation of a well-funded ecosystem&quot; then I suppose you have a point. Clojure is quite modern. And that is confusing.<p>&gt; You could also argue that the effects of lazy evalutation and transducers could have been achieved before using SERIES package, but then you surely haven&#x27;t tried to actually use and debug SERIES code.<p>I&#x27;d much rather debug CL code any day. Even at its worst it is still far ahead of Java&#x27;s tracebacks and having to mentally map them back to where the error occurred in your Clojure code.