2013-06-01から1ヶ月間の記事一覧

DLとWin32APIとFiddle

Rubyには外部のライブラリの呼び出しインターフェイスとしてDLというライブラリが添付されているが、Ruby2.0になってそれは廃止予定になってFiddleが追加された。他にWindows用にはWin32APIもある。このへんをまとめる。■Ruby1.8時代 Win32APIが独自実装で存…

扇形を描く

深い意味は無いのだけどシェーダを使って描画してみた。360度系なので0度(360度)をはさんだ場合がちょっと厄介。あとシェーダに渡す長さがピクセル単位にならないのも困りもの。このへんはメソッド作って内部で処理してやると簡単になるだろう。 require 'dx…

メジャーGCを減らす作戦

RGenGCやmrubyのシンプルな2世代管理の世代別GCでは、新世代オブジェクトはマイナーGCで1回マークされるだけで旧世代オブジェクトになる。この方式の利点は処理が軽いことで、欠点はマイナーGC実行時にタイミング悪く参照されていた一時オブジェクトが長寿命…

ライトバリアの改善策

RGenGCもmrubyも世代別GCなのでライトバリアがある。 どっちもたとえば配列aに新オブジェクトbをpushした場合に、配列aを記録しておいて後で探索するという動作をする。なぜbじゃなくaなのかと言うと、bは配列に突っ込んですぐ取り出して捨てる可能性があり(…

RGenGCとC拡張ライブラリの関係

Ruby2.1のRGenGCについて対応などを考えていたので個人的まとめ。■世代別GCとC拡張ライブラリの相性の悪さ RGenGCは世代別GCである。通常はRubyシステムによって適切に制御されたライトバリアと世代別管理されたGCによって効率よく処理されるが、C拡張ライブ…

世代別とインクリメンタル

mrubyでどのように実現しているのかを眺めてみたので把握したことを個人的メモ。■世代別GCとインクリメンタルGC mrubyでの世代別GCは全探索するメジャーGCと、差分探索するマイナーGCに分かれる。このうちマイナーGCはルートスキャンからスウィープまで一気…

tri-color inclemental gcの色

mrubyのgcを眺めていて把握したことを個人的メモ。mrubyは世代別GC+インクリメンタルGCなわけだが、このインクリメンタルGCはtri-color inclemental gcとコメントに書いてあるようにオブジェクトのマーク状態を色で表現している。3色で白、灰色、黒となって…

RubyとGCについて

思ったことをつらつらと支離滅裂な個人的メモ。1.シンプルマルチスレッドGCこのあいだからいじってるやつだが、とりあえず世代別GCがあるのとないので3倍も違うというのはおかしいのでまだどこかバグっているんじゃないかと思う。効率面での話なのでヒープ…

マルチスレッドGC実験その後

動きのおかしいコードをそのままにしておくのも気持ち悪いのできちんと動くように修正してみた。64指定のao-render.rbが34秒で動くようになったので相当おかしいことになっていたのだと思う。githubにあげたコードはあれこれいじっているが、バグっていた箇…

mrubyでマルチスレッドGCを実験する

githubがよくわかってないのでbranchとかがなんか変なことになっているような気がするのだが、それはさておき。 このあいだ、マルチコアを活用するマルチスレッドGCについてアイデアをひらめいたので、とりあえず手ごろなmrubyをいじって実験してみようと思…

gemを作ってみた。

よくわかっていないのだがほとんど手探りでgemを作ってみた。 gem install dxruby とすればインストールできるんじゃないかな。1.8/1.9/2.0用を含めてあるからどのバージョンでインストールしても動くのではないかと思う。1.8でgemからインストールするとreq…