Yajit (3)
つーわけで yajit アップデートしときました。
http://shinh.skr.jp/tmp/yajit.tgz
やったことは
- 上に書いてある OSX の件
- putself をいい加減に修正して const をいいかげんに実装したので benchmark モジュールが動くようにした
- expandarray 実装したから a, *b = 3 とか動く
- Cygwin/Mingw32 で #define DEBUG 無しでは落ちてたのを修正
- Ruby の GC をほんの少し学んだので mark しなければならないものを mark するようにしたので大きいコードで落ちてたのがなおった
- 毎度 mprotect するのはアホなので mmap した空間に置くようにしたので速くなった
とりあえず速くなったのはめでたいと思う。くだらないループのベンチマークとかだと ruby1.9 より速い。でも send とか getconstant は遅いんじゃないかなと思います。
ていうか Cygwin/Mingw32/MacOSX だとくだらないループは軽く5倍は速くなるんだよな。というか Ruby1.9 が遅い。 ktrace とかした感じだと、ブロック呼び出しのたびにシグナルハンドラいじったりしてるからかなぁという感じでした。
あとインラインアセンブリ内でメモリ壊したりメモリ参照とかする場合は "memory" ってつけとくと良いと知った。
次は
- for が OSX で落ちる(というか OSX 以外で動いてるのが不思議。
ってなに) - 他の命令をもっと増やす
- 可変長引数
- throw の実装
- 関数呼び出しのたびに #ifdef してるのをもうちょい抽象化
- 最適化
あたりかね。