2008-09-01から1ヶ月間の記事一覧

正規表現コンパイラをgithubに置きました

正規表現コンパイラをgithubに置きました。 http://github.com/miura1729/regexpllvm/tree/master生成したllvmのbitcodeを最適化できるようにしました。 やっていることは、bitcodeをファイルに書き出してoptを呼んでいるだけです。 def optimize bitout = T…

Rubyによる正規表現コンパイラ(その4)

状態遷移表を作るルーチンreexp_compにバグが一杯あって、作り直しています。大体うまく行くようになっていますが、まだ動きが変です。あと、llvmrubyを改造してoptimizerをサポートしようと考えています。 いづれにしても区切りが付いたらgithubに置きたい…

Rubyによる正規表現コンパイラ(その3)

ベンチマークしてみました。 if __FILE__ == $0 then require 'benchmark' ruby = "ruby" perl = "perl" dumy1 = "absadsafdsredddkflr" dumy2 = "sse3fdfds2#%666721" all = (dumy1 + dumy2 * 2 + dumy1) * 109000 + ruby + dumy1* 12 + dumy2 * 11 + perl …

Rubyによる正規表現コンパイラ(その2)

ようやくできた! 苦しかった・・・。 昨日のruby66版の後ろにくっつけるか別ファイルにしてrequireするように書き換えてください。次はベンチマークを行います。llvmrubyではまったところ 関数の引数で渡した文字列はVALUE型なのでそのままでは、扱えません…

Rubyによる正規表現コンパイラ(その1)

llvmrubyのサンプルで何か作りたいなと思い、正規表現コンパイラを作ろうと思い立ちました。 調べてみたらomoさんがllvmで正規表現コンパイラを作っていましたhttp://www.dodgson.org/omo/t/?date=20071215。これをllvmrubyに移植しようと思ったのですが、コ…

llvmrubyを使ってみた

少しいじってみました。主にRubyのJITを目指しているruby_vm.rbあたりを主にいじっています。 面白いのですが、まだちょっと完成度が低く感じます。気づいたこと Ruby 1.9.0でも古いバージョンを使っているような気がします。新しいバージョンだと動かないと…

llvmrubyが動いた!!

いろいろ、やってみて何とかllvmrubyのJITを動かすことが出来ました。やったことは、次の通りです。 llvmrubyのオリジナルはRSTRING(obj)->ptrなどの構造体を直接参照しているが、RSTRING_PTR(obj)など新しいアクセスマクロに書き換えた cygwin1.dllとcygrub…

llvmrubyを追ってみた

Cygwinのllvmrubyで、test_ruby_vm.rbを動かすと、 ERROR: Program used external function 'rb_ary_store' which could not be resolved!となる不具合を追ってみました。このエラーを出すのは、lib/ExecutionEngine/JIT/Intercept.cppのJIT::getPointerToNa…

Cygwinを弁護してみる

llvmrubyをCygwinでコンパイルしています。READMEに「Windowsは良く知らないけど、動かす意味あるのかなー?でも、動くようにするのは楽しい時間かもね」って書いてあるとおり、なかなか難儀です。今、llvmのコンパイル中(3回目)です。 Cygwinって変なところ…

面白そうなのでメモ

http://llvmruby.org/wordpress-llvmruby/

スレッドで遊んでたらRubyが落ちた

gcgraph(http://github.com/miura1729/gcgraph/tree/master)を拡張してスレッド毎に今どこを実行しているかグラフ表示することをたくらんでいます。そのためのテストコードを書いてみました。 ruby -r threadprof.rb thread_test.rbとするとこんな感じで1秒…

trace_var

ふと思ったのですが、Rubyのtrace_varって何のため、またはどういう経緯で出来たんだろう? 昔のMLのログとか見た限りはRuby/Tkをサポートするためだと思うのですが・・・。

CRubyも出来る子!という話

keita_yamaguchiさんの、「Rubiniusは出来る子!という話」(http://d.hatena.ne.jp/keita_yamaguchi/20080914/1221328049) を読んで、Rubiniusいいーなー、Cygwinじゃあ動かないんだよなーって悔しがっていたのですが、CRubyでも禁断の秘儀 Binding.of_caller…

ゲームプログラミング界の巨人、Tim Sweeneyが「未来のゲーム開発テクノロジー」を語る は面白いですね

http://www.watch.impress.co.jp/game/docs/20080911/epic.htm面白いですね。今後予想されるアーキテクチャ、新たなグラフィックスのテクニック、関数型言語の必要性、どれをとっても面白いです。 なんか、Tim Sweeneyさんが語る未来のゲーム開発テクノロジ…

Lispで加減乗除

tazantさん、トラックバックばっかりしてすみません。Lispで加減乗除(http://d.hatena.ne.jp/tazant/20080823/1219491744)が面白そうだったのでやってみました。 (define (minus x y) (+ x (- y))) (define (mul x y) (letrec ((mul-aux (lambda (x y res) (…

このセンスに鳥肌が立ちました

tazantさんの「プログラミング言語にこんな機能が欲しい」 http://d.hatena.ne.jp/tazant/20080822/1219407899これは、APIが正しく使われているのかチェックするのに有効そうです。もう少しlater節に柔軟性を持たせる必要があると思うけど。こういう機能を持…

Google Chrome のV8のソースを落としました

V8のソースを落として読んでいます。codegen-*.ccすごいなー。普通、アーキテクチャ独立な中間コードを設定して、ごにょごにょって考えそうですが、アーキテクチャごとに全部1からコード生成ルーチンを作り直してる。やっぱり、リソースあるところは違うなー…

あきらめずに高速化

悔しくて、ついかっとなって別の方法を考えてみた。次のまな板に挙げるのはIS_FREE_CELL #define IS_FREE_CELL(obj) (obj->as.basic.flags == 0 || obj->as.basic.flags == FL_BMAP_UNDER) を #define IS_FREE_CELL(obj) ((obj->as.basic.flags & ~(FL_BMAP_…

Bitmap GCの高速化案を試してみた

autorNariさんにパッチを更新してもらったおかげで、試すことが出来ました。結果です。miniruby-myが高速化案を入れたものです。元 miniruby.exe -e "GC::Profiler.enable; a = []; 2000000.times {a << [1, 2]}; GC::Profiler.report" GC 11 invokes. Index…