Martin Fowler blogged about the question a couple of days ago and ever since I have pondering that maybe it is not really the right question to ask.
I currently toodle between Jython, JRuby and Groovy for various reasons and I am an expert in none. The interesting thing I have found is that it is hard to pick one and just focus on that. To some extent they overlap heavily: they are all cross-platfrom, they are all dynamic, they all integrate with Java API stack I’ve committed to memory.
The first thing to say is that I am interested in scripting languages for prototyping and admin style scripting. I have never used Rails and the Grails data-model means that you need a specific kind of project to work on. If you want to use a particular product and that is only on one platform then that kind of makes your decision for you.
Each language has its own strengths, from my point of view I would categorise them in the following way. Jython has Python’s readability and solid language design, JRuby has Sun’s support, excellent community contributed library code and is very dynamic, Groovy is mini-Java, so it’s easy to learn and most importantly it has a functioning interactive console.
The last point might seem a bit weird, what about jirb and jython‘s interactive mode? Well Martin makes a very important point in his post about the purpose of these ports. Both JRuby and Jython aim to stay faithful to their source languages and be able to run code from their parent C implementations while expanding the API by accessing the Java libraries. Groovy on the other hand stays close to Java syntax and is the only one of the three that allows you to cut and paste code from a regular Java application and then play around with it in an interactive session. That is a very powerful and compelling feature.
Almost all the Groovy I do either comes from wanting to leverage or understand a piece of Java code.
All my Jython work on the other hand is about wanting to automate administration or manual tasks in a clear and concise fashion. Python’s dynamic data structures help, but so does zxJDBC the Jython specific database library that mixes DBI with JDBC to create a highly portable but simple database connectivity solution with no boilerplate!
JRuby on the other hand is something that only really comes up because Alpha Geeks love it. The syntax is gnarled and there is a significant learning curve before someone from a Java background can get “The Ruby Way” of things. The new integration of JRuby into NetBeans though makes developing in the language a comparative snap and I would suspect that JRuby will be a valid choice of application development language alongside Java now. The choice will be driven by the problems you are trying to solve not because one language is inherently “better” than the other.
I think Sun’s exclusive support for Ruby/JRuby is short sighted. It seems that this decision was driven mainly by the RoR hype and the Java celebrities that followed it. If you look closer at the Python language and its community culture, it is much more in tune with Java. Both languages encourage code readability and both have a big community with a community process.
I think the fact that development on Jython has been so slow was probably a factor in Sun’s adoption. The initial core of guys who did the JRuby port very quickly got to the point where they were supporting the latest release of the target language. Sun’s support with tooling and salarying the key developers was probably based of that initial independent success. If the Jython team could get compatibility with Python 2.5 and 3.0 I would certianly be thinking that it should get more attention than it does today.