[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:585

From: SASADA Koichi <ko1 atdot.net>
Date: Wed, 17 Aug 2005 23:53:17 +0900
Subject: [yarv-dev:585] Re: word codeの入出力

 ささだです。
 先日はどうも。

Yuya Kato wrote:
> Yuyaです。
> YARVで遊びはじめました。
> 
>  YARVはword code、、、という話を聞いたことがありますが、
> そのword codeを入出力するインタフェースは、既に実装
> されていますでしょうか?

 まだ無いです。

 コンパイル結果を出力にはいくつか課題があるんですが、一番大きな問題は
「何を出力するべきか」です。

 今のコンパイラは、次のような動作を行います。

1. NodeTree -> YARV Basic Instruction (YBI)

 ノードツリーを YARV 命令列にします。これは、多分どの VM も共通になります。

2. YBI -> Operands Unification (OU)

 オペランド融合を行います(A op1 => A_op1)。現在のところ、1 の段階でオ
ペランド融合をしてるんですが、tail call optimization がうまくできなかっ
たのでフェーズを分けようと考えています。多分、3 と同時にやります。

 どのオペランドを融合するか、は VM 生成時の最適化オプションによります。

3. OU -> Instructions Unification (IU)

 命令融合を行います(A B => A_B)。

 どの命令同士を融合するか、は VM 生成時の最適化オプションによります。

4. IU -> Instruction Address / Function Address

 スレッデッドコードにするために、direct threaded code ならば命令のアド
レス、call threaded code なら関数のアドレスに置換します。

 (命令1) (命令2) ...
=>
 (命令1 を実行する機械語のアドレス) (命令2 を実行する機械語のアドレス) ...

 VM が shared library だと、実行ごとに番地は変わる?


----

 ちなみに、最適化オプションによっては、2 〜 4 はしません。つまり、VM の
バイナリによって 2 〜 4 に対応してたりしなかったりします。

----


 戦略としては、

a. 他の VM (その他のバイナリ、その他のマシンのバイナリ)に命令列を送り
たいなら 1 の段階の結果を出力
   読み込んだとき、2 〜 4 を行う。

b. そのコンパイルした VM でしか動かさないなら、3 の段階の結果を出力
   読み込んだときに 4 を行う。

c. a と b 両方出力しておく
   ひとつのファイルに両方記録する。(hoge.rbc ?)
   a は必須にして、b はオプション、切り離しを容易にしておけばいいかも?
   b が存在する、かつ b は自分の VM で実行可能、であったらそれを利用、み
たいな。

d. a と b 、両方出力できるようにしておく
   それぞれ別のファイルに記録する。(hoge.rbg, hoge.rbc ?)


 こんな感じ。VM のバイナリ依存でよければ b を、汎用性を目指すなら a
を、ってことになると思います。2 〜 4 を省略できる gain がどれくらいある
か見極めてからってことになると思います(ざっとこないだ計ったときは、1 が
コンパイル時間の半分を占めていたような)。

 ちなみに 1 はグラフ構造なので、出力時にちょびっと工夫が要ります。

 re-compile まで標的に入れると、元のスクリプト、または元の NodeTree も
出力しないといけないかなー、とか考えているんですが、よくわかりません。a
さえあればいいのかも。

 とりあえず c が現実的かなぁ。そのためにはそのファイルの構造をきちっと
考えないと駄目ですけど。


-- 
SASADA Koichi at atdot dot net

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       584 2005-08-17 17:56 [yuya-ml 4th.to      ] word codeの入出力                       
->     585 2005-08-17 23:53 ┗[ko1 atdot.net       ]