2017-01-01から1年間の記事一覧
3.times() { println("HO!"); } sum := 0; list { 1,2,3 }.each() { |n:Integer| sum += n } などを入れました。
ブロックオブジェクトで戻り値の型を省略した場合、returnされる値によって型推論されるようになりました。ただ、Clover2の場合boxingやunboxing、プリミティブ型やユーザークラスなどがあるので、それほど便利ではありません。例えばList.mapメソッドのブロ…
メインスクリプトやメソッドの中などで、def fun(a:int): int { return a * 2 } などと書くと関数が定義できます。 内部的には単にブロックオブジェクトをローカル変数funに代入しただけのものです。特に関数オブジェクトってわけじゃないです。単なるlambda…
dlopen, dlsym, dlcloseなどダイナミックライブラリ関連のシステムコールを用意しました。クラスのinitialize():staticで、これらとnative methodの登録用のメソッドを使うと拡張ライブラリが作れます。 詳しくはwikiに書きますので見てください。もしくはco…
> 1+1; 2*3 2 6 などと期待通りに動くようになりました。(今までは1行のみしか対応していなかった)
./configure --with-jit --with-interpreterでバグがあったので修正しました。 インタプリタでもJITできます。すみません。バグに気づきませんでした。
ついにやりました。JITで高速化が成功しました。 JIT無しで3秒かかっていた処理がJITによって1秒になっています。 やりました。 高速化の秘密はコンパイル時にClover2のバイトコードをLLVMによってネイティブコードにコンパイルしている点です。ネイティブコ…
Clover2のソースファイルコンパイル時にbcファイルの出力と実行時にbcファイルの実行が可能になりました。32bitでも動きます。 とりあえず、bit-compilerブランチにpushしています。masterへのマージはもう少し待ってください。bcファイルをコンパイル時にア…
現在bit-compilerブランチで開発しています。 JITのソースファイルが大きすぎてあまりにもコンパイル速度が遅いため、分割しました。かなりいい加減な分割の仕方で綺麗なソースとは言い難いですが、とりあえず、分割はできました。 LLVMの32bit対応ですが、…
現在はbit-compilerブランチで開発しています。 いくらかmasterの方のバグも見つかっており修正しているので、早くmasterの方にマージしたいんですが、まだまだ先になりそうです。 bit-compilerブランチではVMが32bitに対応しています。後はJITの方を32bitに…
現在は32bitのCPUでコンパイルが通るようにコーディングしています。 とりあえず、LLVMは一休みしています。 LLVMの目標はbcファイルをコンパイル時にダイナミックライブラリにコンパイルしてしまい、実行時にロードしてクラスのメソッドとして使えるように…
とりあえず、出力するアセンブラの型が厳密になりました。 コンパイルに関してはb.clcのテストも通ってます。 後基礎ライブラリも正しいアセンブラを出力している様子です。 この後はコンパイルされたアセンブラのコードを読み込む部分になります。LLVMに付…
始めています。githubではブランチを切ったので、前の高速化を行ったときのコードは普通にgit clone https://github.com/ab25cq/clover2.gitでダウンロードできます。 第3弾ではコンパイル時にビットコードにコンパイルしています。この間のバグではバージ…
現在更なるJITの高速化を目指してコーディング中です。 コンパイル時にLLVMのbitcodeにClover2のバイトコードをコンパイルしてしまおうという考え方です。 作業中のコードはgithubでブランチを作っています。bit-compilerがそのコードです。ただバグが出てい…
ついにJITが動きました。 --with-jit指定を付けるとJITが有効になります。まだ処理速度がどれくらい速くなったか試してませんが、とりあえず完成です。 あと--with-optimizeでセグメンテーション違反が出てましたが修正しています。 JIT付きの準現代風、コン…
現在./configure --with-jitは動きません。 とりあえず、b.clのテストは全部通ってます。後はmake testを全てJITで通せば、終わりです。 クロージャーのJIT化には苦労しました。バグにバグを重ねなんとか動くところまで辿り着きました。 一応b.clはmake test…
現在./configure --with-jitは動きません。 だいぶ大物バグを修正できました。一つのバグに2,3日はかかった気がします。かなりの数のバグが有りました。バグの修正にまたバグが有ったりして、かなり苦労しました。やっぱり調子が悪いときにはコーディング…
現在./configure --with-jitは動きません。 だいぶデバッグも進んできました。今日やった分では概ね動く様子です。 基礎ライブラリを動かすにはいくつかバグがありそうですが、そんなに大物バグが無いような気がします。 とりあえず、命令個別のテストが全部…
現在./configure --with-jitは動きません。 デバッグもだいぶ進んできました。キャストは問題なく動いている様子です。 あとは基礎ライブラリをJITで動かしていきます。 すんなり行かないと思いますが、まあ、ぼちぼちやっていきます。 あと、2,3個大物バグ…
現在./configure --with-jitは動きません。 手強い例外処理のバグを修正しました。ネストするtryはできなくなりましたが、とりあえずバグを修正できました。 tryのネストができないのは仕様にするかもしれません。 後は、キャスト関連で変数を全部64bitで扱…
色々とちゃんとした処理になおしています。 OP_LOAD, OP_LOAD_FIELD, OP_LOAD_CLASS_FIELDでは全部64bitで処理されてましたが、ちゃんと型を設定するようにしました。 キャストの処理もそのせいでバグが見つかって直しています。 後は手強い例外処理にまたバ…
現在./configure --with-jitは動きません。 とりあえず、全命令JIT化したのは良いですが、バグがあります。 現在基礎ライブラリを全てJITで動かすのを目標にデバッグしてます。 その次はmake testをJITで動かします。 それで完成ですね。 今日は例外のバグを…
現在./configure --with-jitは動きません。 とりあえず、キャスト命令のJIT化は全部終わったはずです。確認はしていませんが。一応全部の命令のJIT化は終わったと思います。 明日以降確認してみます。後はテストですね。デバッグがあります。 全ての基礎ライ…
現在./configure --with-jitは動きません。 とりあえず、キャスト命令もあとはラッパークラスからプリミティブ型へのキャストのみとなりました。 問題はテストが通るかどうかですが。 明日は夜勤なので、昼間にちょっとコーディングしようと思います。 速度…
現在./configure --with-jitは動きません。 ようやくキャスト命令の3/4くらいが終わりました。 キャスト命令さえ終われば、高速化も終わりです。 後はmake testなどテストをしてデバッグが上手く行けばversion 2.0としてリリースしたいと思います。 7月中に…
現在./configure --with-jitは動きません。 キャスト命令のJIT化をしています。だいぶ進んでます。 FloatとDouble型への変換が終わりました。 後晩にももう少し進めたいと思います。
現在./configure --with-jitは有効ではありません。 キャスト命令のJIT化をはじめました。LLVM上では複数の命令が同じ命令として扱えるので、かなり早く終わりそうです。 来週中?現職を辞める前には終わるかもしれません。 来週は忙しいですが、コーディン…
現在./configure --with-jitは動きません。 まだキャスト以外の命令が残ってました。今度こそ残りはキャスト命令のみとなります。 7月末までにはリリースできそうです。それで、本当にのらプログラマー引退すると思います。拡張ライブラリを書けるようにした…
現在./connfigure --with-jitは動きません。 とりあえず、キャスト命令以外のJITの命令は終わりました。 結構多かったです。 後はぼちぼち膨大な数があるキャスト命令を終えていきます。 どれくらい速くなっているか、楽しみです。
現在./confiugre --with-jitは動きません。 とりあえず、だいぶ進んでます。キャスト以外の命令はほとんど終わりですかね。後はアドレスを取る命令辺りかな。 OP_INVOKE_DYNAMIC_METHODも動いてます。 今回のJITはVMのスタックを使わずにLLVM用のスタックを…