第1回 RHGの逆襲(at 新橋某所)
メモを整理しようとして挫折。ほぼ生のメモを貼っとく
- (以下メモ)
- VALUEをエントリポイントにして読む
- RBasic構造体
- 1.9でRObjectが変わってる
- akrさんがばがんばってできるだけデータを詰め込んだ。ポインタで参照するんじゃなくて
- 埋め込みのためのフラグが増えてる
- VALUEがポインタじゃない場合が小さい整数とシンボル
- 偽はRubyとCで共通
- ささださんは64ビットマシンではFloatを組み込もうとしている
- 1.9のRClassは使用頻度の低いクラスのインスタンス変数の構造体を外だし
- rb_ivar_setは変わりすぎ。埋め込みのせいで複雑化
- Objectはインスタンス変数の値の配列だけを持つ
- 1.9だと、インスタンス変数の種類を増やしながらループするとすごく遅い
- 1.8まではインスタンス固有のテーブルに変数と値の組を持っていた
- 3変数以上の場合は最初のスロットがポインタかどうかをフラグで判断して外部のインデックスを参照する
- 目的はメモリの節約と速度向上
- 同じクラスのインスタンス間では同じインスタンス変数セットを使ったほうがいい。当然
- 構造体のスロットは三つ。RBasicとスロット三つ
- オブジェクトの構造体のメモリはmallocではなくRubyが確保
- YARVはRDataを使ってRubyにメモリを管理させている
- RString。charが入るならそのまま入れちゃえばいんじゃね?
- 外に持つ場合でもできるだけ配列を共有
- 変更が起こったときにはじめて確保
- 埋め込まれているか、共有してるかどうかはFlagsでビットを立てて判断
- RArrayはコードからは埋め込みをやってないっぽい
- ファイルはメンバーが多すぎるので、外に構造体を持ってそこへのポインタを持つ。IOオブジェクトやファイルオブジェクトは絶対数が少ないのでそんなに節約しなくてもよい
- 1.9ではインスタンス変数へのアクセスは1.5倍くらい遅くなっている。でも総じて速くなっているという印象(ささださん)
- 「キャッシュのラインサイズより小さくなれば速くなるんじゃ?」(よしおかさん)
- 埋め込みのサイズが20バイトというのは中途半端。もう少し大きくしてもいいんじゃないか、という意見が会場から
- 「ベンチマークで比較できればもうちょっと議論できるんじゃないか」(よしおかさん)
- (メモここまで)
- なぜかyukobaさんが延々とHotRubyの話
- サーバー側は、Rubyで書かれたソースコード→バイトコード→配列→YARVのオペコードに変換、という流れらしい
- クライアント側のJSでYARVのコードを実行
- 懇親会は秋葉原に移動
- takaiさん with Kiss DX + 30mm F1.4 DC HS 登場
- 2次会はスーパーで買い出しして再び会場で
- ライフスタイルの話題(というかもっとエグい話)に
- 酔ってたしなー
- ジンギスカンどうするよ