ちょっと無理してキャストのJIT化を大幅に進めました。
お題のとおりです。ちょっと疲れました。
キャスト命令の全体の1/2くらい進めた感じです。
後はのんびり進めます。
C関数を呼んでいるだけの部分が多いので速くなるか謎です。
後家のサーバーは速いので測定が難しいかも。誤差があるでしょうから。
JITのオーバーヘットを考えると遅くなる場合もあるでしょうね。
そのあたりjit指定をユーザーに慎重に付けてもらったらいいなと思ってます。
話は変わりますが、だいぶ暑くなってきましたね。
夏は短いのですぐ終わりそうですが。
そろそろ梅雨入りですか。あんまり嬉しくないですね。
本格的な夏が来たら皆さんも夏バテしてないように気をつけてくださいね。
僕も気をつけます。
全演算子をJIT化
ちょっとテストが足りていないので、バグがあるかもしれませんが、多分、大丈夫だと思います。
あとは山ほどあるキャストをJIT化していきます。
見るだけでゲンナリするほど量がありますが、少しずつ進めたいと思います。
あとはVIRTUAL_METHOD_CALLやDYNAMIC_METHOD_CALL辺りが山場かなと思います。まあ、単にCの関数を呼び出すだけになりますが。
とりあえずは、今日も晩酌して、全演算子がJIT出来たことにほっとしてます。
LLVMについてですが、学ぶにはやっぱり検索エンジンが頼りになります。特にStack Over Flowで引っかかるページにはお世話になってます。書籍についてはですが、狐さんは買ったのですが、バージョンの違いもあり、読んでません。結局バージョンアップの速度が早すぎて書籍は陳腐化するのがLinux界隈やプログラミング界隈だと思います。書籍で学ぶには新刊を買ってからすぐ読むしか無いですね。そうしないと、すぐにバージョンが変わってしまい、内容が古くなってしまいます。結局のところコーディングするのに一番大事なのは英語力だというのが僕の持論です。何かフレームワークや言語を学ぶためには本家のマニュアルやチュートリアルを英語で読むのが一番確実だと思います。LLVMではKaleidoscopeというLLVMのチュートリアルで説明されている実装が最初の取っ掛かりとしては良いんじゃないでしょうか。後は検索しながら書いているうちにここまで来ました。
LLVMについては英語だと書籍が一杯あるでしょうし、やっぱりプログラミングするためには英語が読めることが大事じゃないでしょうか。書籍や文章が日本語化された頃にはバージョンが変わっていて困ることになると思います。
でも、僕自身英語が得意かといわれれば、全然そうじゃなくて、ほんと困ってます。ソフトウェアは生き物なので、仕様がどんどん変わっていくものなので、今度始まるコーディングの義務教育化でも、先生方は困ると思います。取っ掛かりは教えることが出来ても、結局英語のマニュアルを自力で読んで自身で学んでいくしかないんじゃないでしょうか。
僕も英語がもっとできたらなといつも思っています。皆さんもそうじゃないではないですか?
JITで演算子の実装を進めました
今回の収穫はキャストの仕方がわかったことですね。
とりあえず、僕のVMにはキャストが山ほどあるので、それが山場だと思っていたので、それがなんとかなりそうだと分かり、ほっとしてます。
あとは道なりに全部の命令をJIT化していきます。
問題は速くなるかですが、LLVMの最適化を信じています。
とりあえず-O3で3倍程度に速くなるLLVMの最適化を見ると、速くなりそうでワクワクします。
Clover2は文字列処理が遅いのが弱点だったので、そこがなんとかなると嬉しいです。正規表現を使った大量の文字列処理だと遅いサーバー上で実行すると13秒とか「今時なにこれ?」みたいな時間をかかってたので。ただpcre自体が遅い場合はお手上げですが、、、、。
でも、速いサーバーではJITを使わなくても十分な速度がでます。とにかくClover2をJIT無しで使う場合はVPSには高いお金を払ってくださいとしか言えません。
どこぞの安い月500円のVPSでは兎に角遅かったです。
Clover2の開発中C++のコンパイル速度が遅すぎて困っていたので月1000円程度のVPSに引越ししました。引っ越すと、C++のコンパイル速度がびっくりするぐらい速くなりました。やっぱり、VPSはケチってはいけませんね。
まあ、そんな感じです。5月中は無理かもしれませんが、6月末にはJIT付きのClover2 versioin1.4がリリースできると思います。その後はSocketクラスや拡張ライブラリを作れるようにしたり、のんびり改良していきます。退役軍人みたいなもんですかね。リリースが楽しみです。
LLVM化は続く
とりあえず、byte,ubyte,short,ushort,int,uint,long,ulongの2項演算子は出来ました。全体の1/4か1/3くらいの進捗だと思います。
早ければ今月末か来月末には終えられると思います。
その後は拡張ライブラリを書くためにSystemクラスにLoadLibrary?でしたっけ。動的ライブラリをロードするシステムコールとnative methodに関数ポインタをマッピングするメソッドを追加したいと思います。
それでやりたいことはほとんど出来たかもしれません。
Socketクラスとかも欲しいですけど、ぼちぼちやっていきます。
Threadクラスは入れないと思います。たぶん、、、。
一時期LLVMを学んでいた頃はちょっと仕事が忙しかった時期と重なって大変でしたが、最近はLLVMもだいぶ理解できたので、ぼちぼちやってます。
LLVM化が完成したらversion 1.4としてリリースしたいと思います。