InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

JVM Dynamic Language Shootout

Posted by Charles Humble on Mar 11, 2008

Sections
Development
Topics
Dynamic Languages ,
Java
Tags
Jython ,
JRuby ,
Groovy

The JVM's ability to support multiple languages is a facet that has only relatively recently received much emphasis from Sun. The change reflects the changing tastes amongst the broad spectrum of developers who target the JVM, some of whom are looking to dynamic languages to speed up parts of their development process. Through the inclusion of JSR 223 (Scripting for the Java Platform) Sun began to formalise the change, ensuring that Java SE 6 is able to execute scripting language code written in dynamic languages, such as Ruby, Python, Groovy, or JavaScript.

Travis Jensen, a technical architect at SirsiDynix, recently carried out a comparison of Groovy, Jython and JRuby looking at the three languages' suitability as the language for web GUI development by an existing team of Java developers. His assessment compares the languages against five broad criteria:

1. The interaction between the dynamic language and Java. Jensen felt that Groovy came out strongest with Jython close behind:

"Because Groovy supports applying types, overriding class methods is clean. Instantiating a Groovy class is the same as instantiating a Java class."
He sees JRuby as presenting the most challenges:
"Going from Java to JRuby is not trivial, even though JRuby compiles down to a class. The compiler seems to be primarily for faster JRuby-to-JRuby interaction."

2. IDE support. SirsiDynix have standarised on JetBrains' IDEA which limits this part of the assessment - NetBeans' JRuby plugin, for example, was not covered. Jensen felt that the Groovy support in IDEA made Groovy a clear winner.

3. The learning curve for existing Java developers. Once again Groovy came out on top in Jensen's assessment:

"As a super-set of Java, it has a very straight-forward learning curve from Java. This is especially important around the APIs, since it uses the Java APIs directly. I honestly don't know whether the top-line productivity is as high as Python and Ruby, but I don't have any evidence that it is not. My gut feel is that the Python and Ruby libraries are optimized more towards their languages and will give a higher top-line."
He also argues that JRuby, despite being regarded as a highly productive language, offers the most challenges for a Java developer:
"Given its closer functional ties, the learning curve for Ruby is highest of the three. It also has the same issues around the Java and native libraries. I honestly think that, once the curve is passed, JRuby could offer the most productivity. I've been nothing but impressed by what I've read about Ruby in that regard."

4. Available web frameworks. A strong vote for JRuby:

"With its direct port of Rails, JRuby seems to come out on top here."
Jython is considered the weakest of the three:
"While CPython has some great options, Jython went nowhere for two years. The main cause of this is two-fold: Jython's current version is 2.2.1, whereas CPython is 2.5 and so many frameworks require compiled C code for performance."

5. Community support: Jensen feels that all three languages enjoy excellent community support but that Groovy has a slight edge:

"As the JVM is the only target for Groovy, the entire Groovy community is the JVM community. This obviously has some significant advantages for people looking to deploy on the JVM. It also seems to be picking up a lot of mind-share as the defacto 'Java Scripting Language', which is helping that community."

Of course any such assessment is to some extent subjective. It is also very much fixed in time - for example the increased activity around Jython, further bolstered by Sun's recent hiring of Frank Wierzbicki and Ted Leung to their team, should improve Jython's web framework status in future. Jensen's post does though provide a useful starting point and set of base criteria for architects or developers facing a similar decision.

IMO by Shahzad Ismail Posted
Re: IMO by Matt Raible Posted
Rails on jruby is not a "port" by Michael Neale Posted
Sun Loves Jython Too by Zeev B Posted
Performance by Arash Bizhanzadeh Posted
Re: Performance by Jon Chase Posted
A few thoughts by Travis Jensen Posted
  1. Back to top

    IMO

    by Shahzad Ismail

    This is going to be the same sh*tty race as that of Java Web Frameworks at the launch of JSF.
    Meaning: there'll be no clear winners and all the consultants, in order to mint money, will conclude that each JVM lang is tailored for some specific need.

    IMO, the end result will be that there'll be no Java replacement lang and Java's life will be extended for further 10 years, as happened to classic struts framework.

    This will be highly detrimental for the whole damn software industry.

  2. Back to top

    Rails on jruby is not a "port"

    by Michael Neale

    It is just rails. And JRuby is just ruby.

  3. Back to top

    Re: IMO

    by Matt Raible

    Would the software industry be better off with a lack of choice?

  4. Back to top

    Sun Loves Jython Too

    by Zeev B

    Sun just hired two key developers that work on Python and Jython. You can read all about it at Tim Bray's blog. This will undoubtedly promote Jython's state and add proper Python/Jython support in NetBeans.
    As for Python web frameworks on the JVM see : www.infoq.com/news/2008/01/django_on_jython

  5. Back to top

    Performance

    by Arash Bizhanzadeh

    It is really interesting that the performance left out from the review, I think one of the most important factors in dynamic languages on JVM, is their performance. And AFAIK all of them sucks; but the question is which one sucks less?

  6. Back to top

    Re: Performance

    by Jon Chase

    I actually just did a micro-benchmark (completely unscientific) of some Java vs. Groovy code parsing XML. Conclusiong: Groovy was slower to execute but quicker to write:).

    www.juliesoft.com/blog/jon/index.php/2008/03/10...

    Jon

  7. Back to top

    A few thoughts

    by Travis Jensen

    As the original author, I've been surprised by the reaction this post has gotten. To reply to some of the comments here:

    @Neale: Of course, you are right. I put it in the "port" category for the same reason I would many of the Python libraries for Jython. Many libraries in Ruby have components written in C that will not work in JRuby.

    @Zeev: Personally, this was the most exciting news I've heard this year. I love Python and am looking forward to it getting more love on the JVM. PyPy is also doing very interesting stuff with its ability to target the JVM.

    @Performance: I didn't do anything with performance because I didn't feel I would be able to extract any meaningful data. I did look through The Computer Language Benchmark Game, but I didn't feel that was representational of the web applications we'd be using it for. We also feel similar to the Python/Ruby communities' use of C, in that, if we see performance problems, we'll look at those as areas to re-write in Java.

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.