Clover2開発日誌

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

JIT高速化の続き

OP_INVOKE_VIRTUAL_METHODを実装しました。インタフェースのメソッドの実行ができます。

先日後は膨大なキャスト命令だけだと書きましたが、大事なのを忘れてました。

あとはOP_INVOKE_DYNAMIC_METHODもまだなので、今日の晩辺り、それを書いておきます。

とりあえず、キャスト命令以外を実装していきますね。しばらく。

その後キャスト命令を一気に終えたいと思います。

高速化ができるかどうかですが確実に速くなると思います。

VM用のスタックにいちいち値を書き込んでいた頃より出力するコードの量が凄く減っています。LLVM用のスタックをJIT時に用意したので。

最適化もフェーズ全てONにして動いています。出力されるコードは本当に最適化が凄くかかって、短いコードとなってます。

やっぱり、僕はとりあえず手探りで書いて、その後もう一回書き直す方法でコーディングしないと駄目みたいで。一発で良いものは作れませんね。もし、プログラマーを仕事にすることがあれば、おんなじように2回書くようにしないと駄目だろうと思います。プロトタイプを作るってやつですかね。とりあえず、プロトタイプを書いてから、本番って感じで書くのが癖みたいです。

だって最初は使う命令を調べながら書くから、どうもわからないことだらけで、正解のコードは書けそうにないのですもの。

実際のプロはどうしているかは知りませんけど、僕のやり方は大体決まってきたかなと思います。

 

LLVM楽しいです。ホント作者って凄い人だと思います。gccの頃は一部のマニアだけのものだったネイティブコードの世界をオープンにしてくれたというか。JIT付きのインタプリタとかコンパイラとか、すごく簡単に作れるようになりました。Linuxより凄い業績じゃないかなぁ。コンピュータの世界にノーベル賞はないですけど、ほんとノーベル賞並の功績だと思います。尊敬します。