InfoQ

News

JRuby総まとめ:Java IntegrationとJSR-45によるデバッグの向上

作者 Werner Schuster, 翻訳者 金森 諭 投稿日 2008年8月22日 午後6時42分

コミュニティ
Java,
Ruby
トピック
言語,
デバッグ,
ランタイム,
JRuby,
パフォーマンス&スケーラビリティ
タグ
JRuby,
デバッガー
JRuby の次のメンテナンスリリースが今月後半に予定されている。今回の変更にはRubyコードからJavaライブラリをどのように使うかを定義しているJava Integrationの見直しがある。Java Integrationは型強制やオーバーロードなどの基本的なことだけでなく、RubyとJavaのやり取りの効率にも関係する。たとえばRubyのブロックをJavaのメソッドに渡すこともしようと思えば可能だ。

Charles Nutter氏は最近JRubyのJava Integrationに加えられた改良点をいくつかあげる(リンク)

0. 明らかなパフォーマンス向上

1. インターフェースを指定したメソッドの最後の引数にクロージャを渡すことができる。クロージャはそのインターフェースの型に変換されることになる。 thread = java.lang.Thread.new { puts 'here' }

2. 全てのメソッドで(アンダースコアを使った)Ruby式のメソッド名によってインターフェースの実装ができる。
class Foo
 include java.awt.event.ActionListener
 def action_performed(event)
 ...
 end
end

3. attr*.[..]を使ってインターフェースのプロパティ的なメソッド(getter/setterやis)を実装できる。

4. インターフェースの真偽値を返すメソッドはメソッド名に?を付けたメソッドで実装できる。

別の改良点としてはデバッグを向上させるJSR-45の採用がある。JSR-45(リンク)ではクラスファイルをソースファイルやソースコードと照らしあわせることができるようになる。JSR-45は一連のクラス属性(SourceDebugExtensionと呼ばれる)を定義していて、その属性にJSRで定義されたSMAP形式のメタデータを入れてクラスファイルがどのソースファイルからできたかを定義する。コンパイラのコードを見ると生成されたクラスファイルに行番号の情報を埋める機能がすでにできている。クラスファイルの生成に使うASMでは、visitLineNumberメソッド(リンク)から行番号をセットすることができる。

SMAPファイルを付加することで、jdbのような定番のJavaデバッガでもバイトコードにコンパイルされたRubyコードに対してステップ実行ができるようになる(jdbを使ってRubyファイルをステップ実行する方法がPastieにのっている(リンク))。

この新機能はJRubyで早くデバッグするためのワンステップとなる。しかし注意しておく必要があるのは、この方法はバイトコードにコンパイルされたコードに対してだけ使えるということだ。インタプリトされただけのコードではトレースやフックベースのデバッガを使わないといけない。アプリケーションコードをバイトコードにできるかを決める要素はいくつかある。たとえばバイトコードだとPermanent Generationメモリ領域を超える場合JVM自体がクラッシュして落ちてしまう。このためJRubyのJITはコンパイルされたメソッドの数を制限している(参考記事・英語)(この制限数は設定により変更可能)。

原文はこちらです:http://www.infoq.com/news/2008/08/jruby-java-integration-jsr45-dbg

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

Typemock: その過去・現在・未来

Eli Lopian氏率いるTypemock社の過去・現在・未来について、インタビュー形式にて記します。

企業とSaaSの仮想化がもたらすのは、迅速性(アップ)だけではない

この論文では、仮想化やクラウドサービスの複雑なメリットと実世界における応用を検討します。さらに重要なこととして、Contegixが複雑な問題の解決に仮想化を実装している方法や、仮想化を使うべきではないケースについて詳細を提供します。

RubyのFiberを非同期I/Oに使うNeverBlockとRevactor

Fiberはユーザに試練を課すことなくこの考えを実装する有益な並行性ツールとして、ライブラリが2つあります。まさにこのためのソリューションとしてあるのがNeverBlockライブラリです。私たちはNeverBlockプロジェクトのMohammad A. Ali氏とRevactorライブラリのTony Arcier氏に話を聞きました。

拡張性に関する悪習慣

システムの保守容易性や拡張性を確保するためのベスト・プラクティスに関する記事は数多くありますが、この記事では避けた方がいい、いくつかの悪習慣(ワースト・プラクティス)を強調します。

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。