Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>In my opinion, both Clojure and Scala don't have great IDE support, if that's really important to you. That said, here's what I can collect from my reading &amp; experience.</p> <p><strong>Scala's pros</strong></p> <ul> <li><strong>Faster than Clojure</strong> thanks to more static typing</li> <li><strong>Closer to ML</strong> (syntax, type-directed programming)</li> <li><strong>Bigger standard API</strong> (Clojure's APIs grow very slowly, because they want to make sure they find the best idioms before making them public. That said, Clojure still has semi-official supplementary APIs)</li> <li><strong>Better integration <em>practices</em></strong> with the typical Java toolset (Clojure is still making some choices, so less firmly established yet on this regard)</li> <li><strong>Older than Clojure</strong> (but Clojure is built on top of a very old and proven core: Lisp)</li> <li><strong>People say it has chances to reach mainstream</strong>, while they wouldn't say the same about Clojure</li> </ul> <p><strong>Clojure's pros</strong></p> <ul> <li><strong>Incredibly easy, fast and right concurrency</strong> thanks to MVCC-based STM <em>and</em> other concurrency mechanisms</li> <li><strong>Immutability by default</strong> helps doing the right thing first</li> <li><strong>More stable standard API</strong> <ul> <li>When things change, usually you don't have to rewrite any existing code</li> <li>(Scala's collections are being remade again for 2.8)</li> <li>(I have also read somewhere that it's common knowledge that Scala's Actors implementation needs a rethinking and rewrite.)</li> </ul></li> <li><strong>Easier to learn</strong> (small language, being a (very-clean) Lisp)</li> <li>An opportunity for you to grow by learning something different</li> <li>Clojure's performance will only get better with time; there's still room for nice optimizations in the compiler</li> <li>Scala's tying to Java feels more limiting than Clojure's (interactions between Scala's and Java's static type systems). One could sometimes say the same about Clojure (Object-Orientation's support is not a 1:1 fit, but support for this will soon get better)</li> <li>Rich Hickey has a gift for making choices that put Clojure in the position of having technical leading features that will be adopted by other languages in the decades to follow. And he also has a gift for <a href="http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey" rel="noreferrer">explaining them</a>. So use them today in Clojure, or wait to use them in another language in some number of years. :)</li> </ul> <p><strong>On distributed concurrency</strong></p> <p>If your concurrency needs are distributed, Clojure doesn't yet have anything for this unless you run it on top of Terracotta or something similar, in which case you'll be able to use all its concurrency features. If you do, you will end up with a better distributed concurrency experience than with Scala's Actors, IMO.</p> <p><strong>Conclusion</strong></p> <p>IMO Scala tries to do everything, and succeeds at doing most of it. Clojure doesn't try the same thing, but what it focuses on is more than enough and succeeds so well that most people really knowing Clojure wouldn't want to go back to something else. <strong>Disclosure</strong>: my personal preference goes, of course, to Clojure. I hope I've been able to be objective in what I wrote.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload