Recently, jruby V1.1 has been released. It is a full-blown implementation of the latest version of ruby in java. Actually, there are two things which make jruby special:
jruby is actually sponsored by Sun who pays two of the main developers full time. I guess sun’s motives for this is to tie closer bounds between the Ruby on Rails web framework and java. For jruby, this means that people are working full time on it, and also that they get to talk to the java virtual machine guys at sun to address performance issues within jruby.
Compared to ruby 1.8.6, jruby is often
faster (if you follow the link, just don’t look at
the memory usage :)
). The reason is that jruby actually is able
to compile ruby code to java bytecode. There even is a standalone
tool called jrubyc which allows to compile ruby code ahead of time.
In addition, you get all the usual nice interfacing with java, just like all the other implementations like rhino or groovy, basically giving you the power to easily access the vast array of existing java libraries, but also to easily “push down” performance critical code to java.
For me, this last feature is actually most interesting. As we all know, 90% of the time is spent in 10% of the code, so a clever combination of a scripted language and a compiled language should give you the best of both worlds. But if the compiled langauge is something like C or C++, you either have to do the interfacing by hand or use a tool like swig. Now swig is a mature piece of code and effortlessly handles a lot of languages, but you will encounter the inevitable segmentation fault once and again. On the other hand if the compiled language is java, you automatically get all the benefits: Automatic memory management, exceptions which actually tell you where the error occurred, and so on. Of course, this comes with a performance penalty, but the time you save on debugging will be a big improvement with respect to productivity.
You might wonder “what about python”. For a number of reasons, ruby and python somehow seem to occupy the same spot in the map of languages, to the point where they have to resort to marketing techniques (ever heard the terms “pythonic” and “the ruby way”?) to distinguish themselves from the competitors. Scientific computing wise, python definitely seems to be ahead of ruby with the scipy project.
However, java-wise, the leading python implementation jython is somewhat behind and still implementing python 2.2, where we’re currently at python 2.5. I think if you really want to use python in a managed environment, you will have to switch to .NET. Microsoft’s IronPython.
Update: On April 22, jruby-1.1.1 has been released which contains further bug-fixes and performance improvements.
Posted by at 2008-04-12 11:04:00 +0000
blog comments powered by Disqus