第九回 RHGの逆襲

ものすごく適当なイベントレポート。話者でもないのに喉が潰れた。酒などで。ふしぎ。


Ruby1.9を読む - Code Reading Wiki
http://www.dzeta.jp/~junjis/code_reading/
話者のさわださんが以前Ruby1.9を読んだときの記録。ありがてえありがてえ。

vm_core.h

VM関連のデータ構造が集められてるのでまずこれを読む。

rb_vm_t
YARVの実行情報
rb_thread_t
スレッドの実行情報(OSスレッド1つに対し1つ)
rb_control_frame_t
実行中のyarvコードの情報(レジスタなど)
rb_block_t
現在実行中のブロックの情報
rb_iseq_t
yarvコード列の方

vm.inc

あいつ正しいCのコードらしいぞ!

--dump=insn

インストラクション列を吐くことができて楽しい。

% ./ruby --dump=insn -e'n=10;a=1..n'
== disasm: <RubyVM::InstructionSequence:<main>@-e>======================
local table (size: 3, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 3] n          [ 2] a
0000 trace            1                                               (   1)
0002 putobject        10
0004 setlocal         n
0006 trace            1
0008 putobject        1
0010 getlocal         n
0012 newrange         0
0014 dup
0015 setlocal         a
0017 leave

世界中のruby処理系が一斉に失なわれたら……!

ruby処理系のビルドにrubyを使っているので、僕らは二度とrubyと出会えなくなる

JOKEが通じないruby処理系

vm_opts.hでsupport joke設定してビルドしたruby処理系に冗談が通じないバグが!
id.cがvm_opts.hをincludeしていませんでした → これを直すパッチを書いて送るとrubyコミッタになれる!

無駄VALUE

今は
bignum + float -> bignum + float2big(float)
bignum + fixnum -> bignum + fixnum2big(fixnum)
のような形にして
bignum + bignum
の流れに通して答えを出してる。hoge2bignumで生んだオブジェクトがすぐゴミにしておいてGCまでごみとして残り続ける憤慨!


bignum + floatの場合の処理をごちゃごちゃ。
bignum + fixnumの場合の処理をごちゃごちゃ。
bignum + bignumの場合の処理をごちゃごちゃ。
という形にして、そもそもごみ出ないようにすればよろしいかも。


解放するコード仕込む?
patch+ベンチマークでmatzを騙せ!


fixnumの範囲のbignumを全部作っておくと……!

飲み会

gitはなんかあれげだいえ新たな概念がですね普通に使う分にはhgのが楽じゃないですか、とかGaucheのコードはShiroさんの人格者っぷりが出てるような美しさが、などあちこち話題を飛ばしたりしてて喉が潰れた。

test