Frischzellenkur: Ruby für CLR und JVM

Seit Ruby von David Heinemeier Hansson auf Schienen gesetzt wurde ist die Programmiersprache Ruby mega hip – siehe auch Tiobe Programming Community Index – November Headline: Ruby is rocketing skywards.

Zwar steht der Ruby Interpreter für alle wichtigen Plattformen zur Verfügung – aber ich würde ungerne einen Interpreter einsetzen, der neben der langsameren Ausführung des Codes auch die Herausgabe des Quellcodes zwingend erforderlich macht. Und mit RubyScript2Exe steht ja auch kein echter Compiler zur Verfügung. Zwar gibt es mit YARV ein Projekt für eine Ruby-VM, aber es erscheint mir viel eleganter statt einer eigenen Ruby VM oder diverser Ruby-Compiler für verschiedene Plattformen nur Ruby-Compiler zu haben, die die gängigen VM wie die Java VM oder die Common Language Runtime (CLR) von .NET. bedienen und damit auch gleich einen Brückenschlag in diese Welten ermöglichen.

Microsoft stellt dafür den Softwareentwickler John Lam zum Januar 2007 ein, der hinter RubyCLR steht. Damit soll Ruby für die CLR von .NET verfügbar gemacht werden. Ein ähnliches Projekt finde ich unter Ruby.NET in einer frühen Beta-Phase. Letzteres erfordert .NET ab Version 2 und läuft damit nicht unter dem aktuellen Mono.

Auf der anderen Seite hat Sun zwei kompetente Entwickler aus der Open-Source Gemeinde hinzugewonnen und so tüfteln Charles Oliver Nutter und Thomas Enebo nun für Sun Microsystems an dem Java basierten Interpreter JRuby herum, der neben der Ausführung von Ruby Code in der JVM auch die Integration mit Java Code ermöglicht. Derzeit gibt es nur den Java basierten Interpreter – ein bytecode Compiler ist aber in Arbeit. Mit JRuby kann man also auf das Java Universum zurückgreifen und z.B. plattformübergreifende Desktop Anwendungen auf Basis von Swing erstellen:

[RUBY]
# Import Java packages
require ‘java’

JFrame = javax.swing.JFrame

frame = JFrame.new(“Hello Swing”)
button = javax.swing.JButton.new(“Klick Me!”)

class ClickAction < java.awt.event.ActionListener def actionPerformed(evt) javax.swing.JOptionPane.showMessageDialog(nil, "Hello from JRuby.
Button ‘#{evt.getActionCommand()}’ clicked.”)
end
end
button.addActionListener(ClickAction.new)

# Add the button to the frame
frame.getContentPane().add(button)

# Show frame
frame.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
frame.pack()
frame.setVisible(true)
[/RUBY]

Darüberhinaus gibt es auch schon Bemühungen SWT mit JRuby zu nutzen oder JRuby unter OS X als einfaches Deployment Modell für GUI Anwendungen zu nutzen.

Interessant wird es auch noch sein, wie das ganze dann ggf. noch mit Trolltechs Qt Jambi zusammen geht oder ob man gleich QtRuby via JRuby nutzen kann.