JR中央線東小金井駅南口から,西へ向かって徒歩8分程度です. 農工大の東門に建物の配置図があります.WWWを見られる方は, http://www.cs.tuat.ac.jp/access.html に案内図があります.
本報告では、スクリプト言語 Ruby による JavaVM である Rava について紹介 する。スクリプト言語 Ruby は国産オブジェクト指向スクリプト言語で、記述 性や生産性について定評のある言語である。これらの特徴をもつ Ruby を用い て JavaVM を作成することで、容易に JavaVM を開発できるのではないかと考 えた。現在 Rava は Java クラスファイルのロード、バイトコードの解釈実行、 Ruby によるネイティブメソッドの記述・実行、例外処理機構、スレッドの管理 機能および実験的なJITコンパイル機能を有している。具体的には次の項目につ いて述べる予定である。
出席の連絡先 伊知地 ichiji@acm.org および並木 namiki@cc.tuat.ac.jp までご一報ください。代表者が一括してお申し込みの場合には,忘年会出 席者全員の氏名をご連絡下さい。
発表ではデモとその実装方式、そして評価を示し、処理速度が非常に遅い ことを確認した。
そして、処理速度の向上のために実験的にJIT コンパイラを作成し、単純な インタプリタとしての実装よりも処理速度が大幅に短縮されたことを示した。
また、Ruby を用いたことによる生産性の向上が顕著に表れたのを示した。
質疑応答: Q.「ぶぶ」という Java による scheme の実装はあったよね? A.はい。サーベイ不足でした。 Q.メソッドテーブルを名前とのハッシュテーブルで保持すると遅くならないか? A.遅くなりますが実装が楽なのでこうしました。 Q.サブルーチンスレッディングによる解釈実行はメソッド実行のコストがかか ってしまうのでは? A.かかります。それは JIT コンパイラによって解決します。 Q.case/when が遅い、とのことですが、case/when を分割しておいたら速くな るのでは? A.思いつきませんでした。実際に評価してみないとわかりません。 Q.ラベル付き break などで goto 文は使うだろうから、そのまま Ruby のソー スへ変換するのは難しいのでは? A.Ruby の構文(try/catch)で対応できそうなので、多分大丈夫じゃないかと思 います。 (注記:Ruby にはラベル付き脱出用 break はありませんでした。訂正します) Q.スレッドに関して2日かかっているが、何か問題があったのか。 A.java.lang.Thread におけるスレッド処理自体の理解とそれに順ずる処理、お よび関連するバイトコードのバグフィックスに時間がかかりました。 Q.JavaVM 以上の機能はつけられないか?(ロードしたクラスファイルが古いも のに変わっていたらリロードするなど) A.つけられると思います。クラスファイルの日付のチェックをどのタイミング に行うか、などが少し悩ましいのですが、例えば Java プログラマが明示的に クラスローダにロードさせるような機構は可能だと思います。 Q.デバッグなどに便利な機能はつけられないか? A.つけられると思います。工夫のしどころだと思いますが。 Q.例えばスレッド切り替えタイミングを全部ユーザが指定するようにできると か。 A.スレッド管理をラウンドロビンに変えるとか、Ruby のスレッド切り替えを停 止するようなものを利用するなどして実現可能だと思います。 Q.VM の実行状態を可視化できるのでは?(有用かはわからないが) A.可能だと思います。Rubyにも手軽に扱うことが出来る GUI 環境が揃ってきて いるのでこれも意外と手軽に出来るんじゃないでしょうか。用途としては、ス タックマシンが動くところを見ることが出来る、という教育用でしょうか。 Q.全国大会に、どんなテーマで出すの? A.検討中です。Ruby で書いたことによる生産性が主になるような気がします。 Q.もっとrubyらしい作り方は無いの? A.あるのかもしれません。模索します。JIT コンパイル時の手続きの持ち方に 少し工夫してあります。 Q.厳密なJavaVMを作ろうとしたら、結局 Ruby で書いても他の言語で書いても 行数とかかわらないのでは? A.そうかもしれません。ただ、やはり(性能と引き換えの)高機能さがあるの で、Ruby での書き易さはあると思います。 Q.未実装バイトコードとは? A.テストで動かした Javaプログラムで利用されていないバイトコードです。未 実装バイトコードが現れたら実装する、というスタンスだったので。 Q.あなたの出自は? A.(会場で答えましたが忘れました)