Some of the reasons why I try to use ClojureScript for new projects are:
- The functional programming paradigm makes problem solving easier/faster, and code becomes nicer i my opinion.
- core.async makes asynchronous code a lot nicer, which is a huge boon on the HTML5/nodejs platform. Essentially you code that looks linear instead of callback hell.
- core.logic gives access to to logic/declarative programming.
- Immutable/persistent datastructures both supports functional programming, and when used it also improves the quality as many potential bugs related to mutable data are eliminated.
- It is a hosted language, meaning it is very interoperable with the HTML5 host platform, – runs nice in browsers, nodejs etc., and you can use all the usual APIs easily.
- It has macros and meta programming support, which add an extra level of abstraction. This is also what enables logic programming, go-like asynchronous programming, optional typing etc. to be shipped just as a library, – where other languages would need to be reengineered.
- The community feels both very bright and pragmatic.
Of course there are also some tradeofs:
- Compilation time/memory-usage is a bit high and requires java, which means it is not suitable for developing on phones/tablets(when offline) nor on low-end virtual hosts etc. (such as the c9.io development environment). Should have improved a bit recently though.