JRubyの中の人
急遽、 Thomas Enebo さんと語る会。ヌーラボ社にて午前10時より1時間ちょっと。人数は10人ぐらい。
yajbを作っていて気になったところなどを聞いてみた。英語をしゃべるのが難しかったが、非常に楽しかった。もっといろいろ聞いてみたかったけども、プロジェクトは立て込んでいるし、平日なのでなかなか大変。
質問コーナー
※kiwanami主観入り。
Q:JRubyのパフォーマンス改善はどうやっているか?
A:いろいろ。
マイクロベンチマークの繰り返しで重いところを改善する。結局、標準添付ライブラリ(IOとかnetとか)が遅かったりするのでなかなか難しい。
JVMバイトコードへのコンパイルを進めている。大体2倍くらい速くなるらしい。今は一部だが将来的には任意のRubyコードを変換できるようにする予定。YARVのバイトコードをJVMバイトコードに単純変換して動かすものも考えている。
Q:オーバーライドメソッドの解決方法は?
A:経験的方法。引数の型を見て適当に判断。
厳密にやろうとすると大変。同じ名前のメソッドならばDuckTypingに期待して、ある程度互換な型であれば動くことを期待してもいいのではないか。基本的に100%の変換はありえない。
Q:数値型の相互変換は大変そうだがどうしているか?
A:Rubyの型に変換して計算。
JavaとRubyとの相互変換の際に曖昧性やパフォーマンス低下が起きている。ただ、今後Javaの数値を変換するのではなく、DuckTypingの要領でJavaの数値オブジェクトをラップしてそのまま変換せずに計算してしまうようなMathエンジンを考えている。
Q:Bytecodeツールは?
A:ASM。
Javassistは知らなかったみたい。
Q:Javaのクラスの継承はできる?
A:出来る。
ただし、クラス継承機能自体にいくつかバグがある。また、protectedメソッドへのアクセスが出来ないなどの問題がある。