JRuby 0.9.1 now!
JRuby関連の話題をJavaにカテゴライズするかRubyにカテゴライズするか悩むところ。
というわけでJRuby 0.9.1がリリースされました。
主な変更点は、
- Overall performance is 50-60% faster than JRuby 0.9.0
- Improved Rails support
- New syntax for including Java classes into Ruby
- New interpreter design
- Refactoring of method dispatch, code evaluation, and block dispatch code
- Parser performance enhancement
- Rewriting of Enumerable and StringScanner in Java
- New experimental syntax for implementing interfaces
- 86 Jira issues resolved since 0.9.0
とのことですが、いくつかブログを検索したところみんな口をそろえたように「Overall performance is 50-60% faster than JRuby 0.9.0」を強調しています。
いままでよっぽど遅かったんですな。まあ私は遅さを認識するほど使い込んでませんが。
ちなみに私が気になったのは次の二点。
- New syntax for including Java classes into Ruby
- New experimental syntax for implementing interfaces
New syntax for including Java classes into Ruby
いままではJavaのクラスをJRubyのコードから使うためには、JRubyに定義された「include_class」とか言うのを使ってましたが、0.9.1からはそんなめんどくさいことしなくても、すぐに利用できるようになってます。
# Import Java packages require 'java' # 0.9.0 include_class "javax.swing.JButton" button = JButton.new('Klick Me!') # 0.9.1 button = javax.swing.JButton.new('Klick Me!')
まあ素敵。
しかもRubyのクラスは単なる定数として扱われます。つまりこんなことも。
# Import Java packages require 'java' JFrame = javax.swing.JFrame frame = JFrame.new("Hello Swing")
おもしろい。
New experimental syntax for implementing interfaces
次に、「実験的なインターフェスを実装する新しいシンタックス」だが、どうもJRubyのページを色々探してみたんだけど、どんなシンタックスなのかさっぱり出てこない。
ダウンロードしたjrubyのサンプルフォルダの中にjava.awt.event.ActionListener
を実装しているコードが見受けられるけどまさかこれじゃないよね?
button = javax.swing.JButton.new("Klick Me!") class ClickAction < java.awt.event.ActionListener def actionPerformed(evt) javax.swing.JOptionPane.showMessageDialog(nil, "<html>Hello from <b><u>JRuby</u></b>.<br> Button '#{evt.getActionCommand()}' clicked.") end end button.addActionListener(ClickAction.new)
いくつかぐぐってみてもそれっぽいけど動かないコードをなんとかみつけたくらい。
やっぱ実験的なシンタックスというくらいだから、あまり公表したくないんだろうか?(だとしたらリリースノートで触れるなとか言いたいところだが...)