Clover2開発日誌

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

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アルゴリズムの改良などもしたいと思います。

JIT高速化の続き。

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

 

キャスト命令のJIT化をしています。だいぶ進んでます。

FloatとDouble型への変換が終わりました。

後晩にももう少し進めたいと思います。

JIT高速化の続き

現在./configure --with-jitは有効ではありません。

 

キャスト命令のJIT化をはじめました。LLVM上では複数の命令が同じ命令として扱えるので、かなり早く終わりそうです。

来週中?現職を辞める前には終わるかもしれません。

来週は忙しいですが、コーディングする時間を作って、終わらせたいと思います。

キャスト命令が終わればmake testやらテストをしてデバッグして安定すればversion 2.0としてリリースします。

まあ、リリースと行ってもgithub上でしか配布していないので、単にpushするだけですが。

version 2.0がリリースできれば、かなり高速化される予定なので使ってやってください。うりはmixin-layersによる差分プログラミングです。まあ、僕のアイデアじゃないですけどね。10年くらい前にアスペクト指向が流行ったときに出てきた日本人の先生のアイデアです。C++でもmixin-layersが使える実装があったはずです。そちらで試してもらってもいいですけどね、、、。オリジナルはJVM上で動くMix-Juese(ミックスジュース。綴あっているかな?)って言う実装です。今も開発されているかは知りませんが。

差分プログラミングは僕自身が使ってみたかったので入れてます。大規模なソフトウェアでは有効な考え方で、もっと注目されてもいいと思います。