PTT幹事の田中哲朗@東京大学 です. 10月23日におこなわれた第293回PTTのメ
モを流します.

---------------------------------------------------------------------- 
第293回 PTTメモ

日時: 2003年10月23日 (木) 18:30 から 
場所: 東京工業大学大岡山キャンパス西8号館W棟10階1008号会議室
出席者: 笹田耕一(農工大),首藤一幸(産総研),伊知地宏(ラムダ数学教育研),
        鷹岡良治,脇田建(東工大),酒井政裕(慶應大),三浦明平,崔哲浩,
        佐々木直志,花田智洋,多田好克,鈴木信吾(電通大),
        石畑清(明大),田中哲朗(東大)

題目: インタプリタ生成系 Virtual Machine Builder の紹介

話者: 内山雄司(東京工業大学)

概  要:

インタプリタ自動生成システム Virtual Machine Builder (VMB) を紹介する.
VMB は,バイトコード命令の仕様を抽象的な記述として受けとり,その記述を
解析してインタプリタのコードを出力するシステムである.VMB を利用するこ
とで,移植性や保守性に優れたインタプリタをより簡単に実装できるようにな
ると考えている.今回の発表では VMB の概要について述べ,VMB を用いたイ
ンタプリタの開発例を示す.また,本研究の応用として,命令の仕様の記述を
バイトコード解析に利用することについて考察する.

質疑応答:

Q. 言語機能としての例外処理などは記述できるのか.
A. できる.O'Caml にも例外処理機構はあって,それは記述できている.

Q. スレッドは記述できるのか.
A. 今は何も考えていない.

Q. 多相型を扱う命令は記述できるのか.
A. 型情報がオブジェクトに埋め込まれているのであれば,条件分岐を使って
   記述できる.

Q. float が扱えないために書けない命令が 2 つというのは,少なくないか.
A. O'Caml では float 演算は全て C の関数を呼んでインタプリタの外側で処
   理しているため.

Q. 演算の際に int に変換するのではなく,O'Caml の型の上での演算をユー
   ザが定義して,それを使えばよいのではないか.
A. そうしたいと考えている.

Q. (前質問への回答に対して) そういう事をすると,仕様記述の利点と言って
   いたものがほとんど失われてしまうのではないか.
A. ユーザ定義の演算が算術演算としてのセマンティクスを満たしている事を
   仮定して解析するとか...(まだ深く考えてはいない)

Q. (オリジナルのインタプリタとの性能比較に関して) VMB はスタック溢れの
   チェックなどをしていないが,比較はフェアになっているのか.
A. フェアな比較になるように,VMB が生成したものとオリジナルの実装とを
   見比べて,スタック溢れ検査のコードなどはオリジナルと同等になるよう
   に手で挿入している.

Q. 性能差の原因として挙げられているものは,実行環境やアセンブリ命令の
   並び方に依存する話なのでは.
A. そう思う.

Q. O'Caml の他には何か書けるのか.
A. BIT という,scheme の処理系を書こうと試みた.BIT はオブジェクトの表
   現にリストを用いており,VMB ではループを表現できないので,あまりう
   まくいかなかった.

Q. 列の表現で [v] の代わりに V(1) と書いても同じなのか
A. [v] を代入するだけの操作なら同じだが,[v] と書くことで,後状態とし
   て [v + x] というような演算に利用できる.

Q. 後状態の方に S(n) ではなく単に S と記述するのは,書かなくても S(n)
   に決まっているという理由か.
A. そうです.

Q. 直列化は,全部退避してしまって C コンパイラに任せるのでもよいのでは.
A. 要素数が静的に決まらない列を退避するためにはメモリアロケーションが
   必要になるので,効率が悪い場合がある.また,そうやってメモリに退避
   してしまうと C コンパイラでの最適化は難しい.


-- 

-
東京大学情報基盤センター 田中哲朗
http://www.tanaka.ecc.u-tokyo.ac.jp/~ktanaka/