来年の目標

鬼が笑うところをみてみたいと思うので来年の目標を書きます。

正月に仕事しない

昨日(1/1)排水が詰まったということで排水管の掃除に行ってきました。ラバーカップ(通称すっぽん 正式名称 Plunger)、強力ですね。お勧めです。空気が抜けると使えないので、使えるところが限られるけど。なお、去年と一昨年は漏水で正月に道路工事しています。

さて、排水管の掃除の前後にCuckoo Hashingの調査の続きをしていました。
継承ツリーを辿る処理をサボる方法として、メソッドテーブルに考えられるサブクラスを全部登録してしまうということを考えています。もちろん、型推論の結果、メソッドテーブルに登録するクラスが限定できることが多いと思いますが。
例えば、Objectで定義されているメソッドを呼び出す場合、定義されている全部のクラスがメソッドテーブルに登録されるわけです。この場合、メソッドテーブルがどのくらいの大きさになるのかを調べてみました。

結果はクラスが全部で197個あって、テーブルが283エントリーと131エントリーです。まあ妥当なところかなと思います。全部のメソッド呼び出しでこんなテーブルができるとたまらないけど、こんなにテーブルが大きくなることはあまりないと思うし、同じ名前のメソッド名だとテーブルが使いまわせるかなと思います。
なお、テーブルの大きさを減らすのと参照時間を短くするために2つのテーブルの大きさを変えるようにしました。最初に参照する方のテーブルを大きくすることで、1回のテーブル参照で済む確率が増えます。

ソースリストはここにおいておきます。
http://github.com/miura1729/yarv2llvm/tree/dynamic_type/jikken/cuckoo.rb

出力結果は長くなるので、省略します。見たい方は(いるのかなー?)、実行してみてください。ruby1.8でも動くと思います。

そういうことで、目標の追加

正月からこんなことをしなくて済むように彼女を見つける

あ、これは今年の目標か。