JITで3倍速を実現しました。version 3.0.0リリース
ついにやりました。JITで高速化が成功しました。
JIT無しで3秒かかっていた処理がJITによって1秒になっています。
やりました。
高速化の秘密はコンパイル時にClover2のバイトコードをLLVMによってネイティブコードにコンパイルしている点です。ネイティブコードはダイナミックライブラリに保存しています。それを実行時に読み込み実行時には全くコンパイルせずにネイティブコードで動いています。もうJITとは呼べないかもしれません。単にネイティブコードコンパイラと言ってもいいかもしれません。
ただし、注意点があります。環境変数LD_LIBRARY_PATHに~/.clover2を追加してください。基礎ライブラリは~/.clover2に置いてあるので、soファイルが~/.clover2にあります。ダイナミックライブラリの検索パスに~/.clover2を追加してください。それで実行時にダイナミックライブラリが読み込まれてネイティブコードでClover2のコードは実行されます。ユーザーが作ったクラスを~/.clover2に追加する場合はclclファイルだけでなくso, so.1.0.0ファイルも~/.clover2に追加する必要があります。
あとはLLVM3.8でしか実行をためしていないので、LLVM3.8以外では動かないかもしれません。ただ、単にbcファイルしか出力していないので、他のLLVMのバージョンでも動くかもしれません。また試しておきます。
bit-compilerブランチとして開発していましたが、version3.0としてmasterにマージしています。git clone https://github.com/ab25cq/clover2.gitでソースファイルがダウンロードできます。インストール方法はwikiを見てください。wikiの方も新しい情報に今から更新しておきます。
今日はビールと日本酒で祝杯をあげます。
優しく見守ってくれた奥さんに感謝したいと思います。