It wasn’t until recently that new JVM based languages spread all around. Clojure, Scala, Ceylon and Kotlin are the newest ones joining the rush and elderly ones are Groovy, JRuby and Jython.
Clojure and Scala are new frontiers of functional language domain, stating immutability and no state sharing like their predecessors Erlang, Haskell and Lisp.
On the other side Ceylon and Kotlin are commercially initiated languages, as a response to to Oracle’s Sun acquisition. As an IDE company Jett Brains launched its own Kotlin language, while JBoss drove Ceylon under the management of Gaving King.
Personally I can understand Ceylon and Kotlin language initiatives as they are supported by JBoss and JetBrains respectively. It is obvious that JBoss as a J2EE player does not want to depend on Oracle’s Java plans and lose market share in the long term. Same logic is valid for JetBrains as well. I suspect both companies does not want to wait for Oracle’s Java plan or to sued due to any kind of Java patent infringements.
When it comes to functional languages, I don’t think none of them will be a main stream language for another decade unless todays micro processor design does not change. It is evident everything is stateful in microprocessors, from binary calculations to signed/unsigned numbers and assembler commands. In all these cases, a state check exists. I can say that functional-program contradicts with today’s basic principles of computing.
When reviewing those new languages, I think there is a need to highlight what’s wrong with current Java, what kind of obstacles are exist? In my opinion there are some certain issues needing improvement, like nasty null checks, repetitive type casting, broken garbage collection and memory leaks in class loaders, lack of true isolated class loaders with self memory management parameters, no built-in immutable object support, no modular system to deploy applications with a small dependency footprint (JRE 1.7 size is around 19mb).
To be honest, I don’t think Java will die soon due to those aforementioned issues, it is also clear that new emerging languages are not completely addressing today’s software development problems. I think we are in a corner stone that “one size fits all” doesn’t work any more. It’s high likely there are going to be software systems including components developed by different languages. For example a front end web application might be java based while a backend pricing/exchange application can be built onto Erlang/Scala to benefit from native immutability/messaging support.
I would like to see picking right tool for the job, instead of pushing one tool for everything approach. I imagine neither Java nor any of those aforementioned languages will address today’s software development issues alone, instead they will live in the same ecosystem altogether.