Clover2開発日誌

Clover2というJavaのように静的な型を持つRubyのようなコンパイラ+仮想マシンの開発日誌です。LLVMでJITもします。https://github.com/ab25cqにて開発しています。

JITのデバッグ

現在./configure --with-jitは動きません。

 

デバッグもだいぶ進んできました。キャストは問題なく動いている様子です。

あとは基礎ライブラリをJITで動かしていきます。

すんなり行かないと思いますが、まあ、ぼちぼちやっていきます。

あと、2,3個大物バグがありそうですが、めげずにやっていきたいと思います。

JITのデバッグの続き

現在./configure --with-jitは動きません。

 

手強い例外処理のバグを修正しました。ネストするtryはできなくなりましたが、とりあえずバグを修正できました。

tryのネストができないのは仕様にするかもしれません。

 

後は、キャスト関連で変数を全部64bitで扱っていたせいで、いい加減な処理でも動いてましたが、ちゃんと型をもたせるように修正したため、それをきちんと処理するようにすれば、概ねバグは修正できると思います。たぶん、、、

 

まだ大物バグがあるかもしれませんが、ぼちぼち修正していきたいと思います。

JIT高速化の続き

色々とちゃんとした処理になおしています。

OP_LOAD, OP_LOAD_FIELD, OP_LOAD_CLASS_FIELDでは全部64bitで処理されてましたが、ちゃんと型を設定するようにしました。

キャストの処理もそのせいでバグが見つかって直しています。

 

後は手強い例外処理にまたバグが見つかってます。明日以降直します。

LLVMデバッグには大体2週間位かかる予定です。

まあ、ぼちぼち、やっていきます。

JIT高速化の続き

現在./configure --with-jitは動きません。

 

とりあえず、全命令JIT化したのは良いですが、バグがあります。

現在基礎ライブラリを全てJITで動かすのを目標にデバッグしてます。

その次はmake testをJITで動かします。

それで完成ですね。

 

今日は例外のバグを修正するのに苦労しました。

バグにさえ気付かずversion 2.0をリリースするところでした。

なんとか修正できて良かったです。

 

でも、デバッグはやっぱり嫌な作業ですね。動いたときの嬉しさは凄いですけど。産みの苦しみみたいなものですかね。

コード自体を書くのは割りと簡単なんですけど、デバッグには苦労します。デバッガあまり使わずprintfデバッグしていることが多いからですかね。gdbはインタフェースが使いづらくてセグメンテーション違反のときに場所を特定するくらいしか使ってません。

 

まあ、version 2.0を目標に地道にデバッグしていきます。

いつまでかは分かりませんが、近いうちにリリースできるようにします。お楽しみに。

JIT高速化の続き

現在./configure --with-jitは動きません。

 

とりあえず、キャスト命令のJIT化は全部終わったはずです。確認はしていませんが。一応全部の命令のJIT化は終わったと思います。

明日以降確認してみます。後はテストですね。デバッグがあります。

全ての基礎ライブラリがJITで動き、make testが全部JITで動いたら完成です。ここからが大変です。とりあえず書けたの良いのですが。多分、バグがあるので。上手くすんなり動けばいいのですが、ちょっとテストを動かすのが怖いですね。

まあ、明日以降にします。今日は結構進捗がありました。

 

もし、上手く動けば、version 2.0としてリリースしたいと思います。

JIT高速化の続き

現在./configure --with-jitは動きません。

 

とりあえず、キャスト命令もあとはラッパークラスからプリミティブ型へのキャストのみとなりました。

問題はテストが通るかどうかですが。

明日は夜勤なので、昼間にちょっとコーディングしようと思います。

速度出ますかね、、、それが心配です。LLVMの最適化は凄いので、たぶん、速くなっていると思いますが。3秒かかっていた処理が1秒以下になるのが目標なので、GCの改良も含めて、なんとか実現したいと思います。

あとはJIT時のLLVM用のスタックにオブジェクトが存在していてClover2のスタックにはオブジェクトが存在しない場合GCはどうなるんだという心配もあります。たぶん、大丈夫な気もするんですが、もし駄目ならLLVM用のスタックもマークしないといけないかもしれません。

そんな感じですかね。

明後日から1ヶ月ほど休みになるので、7月中には高速化は終わると思います。

もう少しお待ち下さい。

JIT高速化の続き

現在./configure --with-jitは動きません。

 

ようやくキャスト命令の3/4くらいが終わりました。

キャスト命令さえ終われば、高速化も終わりです。

後はmake testなどテストをしてデバッグが上手く行けばversion 2.0としてリリースしたいと思います。

 

7月中にはめどを付けたいと思います。

どれくらい速くなっているか楽しみです。

3秒かかっていた処理が1秒以下になっていれば目標は達成です。

もし1秒以下になっていなかったら、GCアルゴリズムの改良などもしたいと思います。