逃避活動中。
ふと、BitClust データベースにあるメソッドの中ではどんな名前が多いのか調べてみた。
~/c/bitclust % ruby t new 106 to_s 33 [] 32 each 29 size 25 close 21 open 19 delete 19 << 18 == 17 to_a 17 + 15 name 14 to_i 14 <=> 13 []= 12 length 12 path 11 - 11 include? 11 parse 11 dup 11 clone 10 clear 10 & 10 read 10
new がトップ。そりゃそうだ。
その次に to_s, [], each, size と来る。 みんな length が嫌いなようだ。
その次が close, open。……どうして数が違うのか。
でもって俺の嫌いな <<。 特に Array#<< が嫌いなんだよ。 concat だか push だか忘れるから。
(18:53)
ReFe2、その実態は BitClust 対応 ReFe。
~/c/bitclust % refe2 string index -l String#index
もちろん継承も見る。
~/c/bitclust % refe2 arr map Array#map < Enumerable#collect --- collect {|item| ... } --- map {|item| ... } 各要素に対してブロックを評価した結果を全て含む配列を返します。 ブロックを省略した場合、 obj.collect {|item| item} を行います。これは [[m:Enumerable#to_a]] と同じです。
名前と実体の区別によってエントリの絞り込みも多少進化している。 例えば「s instance_eval」で検索すると S で始まるクラス全部に対して、 (Object から継承した) Object#instance_eval がひっかかってしまうのだが、 エントリの同一判定で絞り込む。
~/c/bitclust % refe2 s instance_eval ScriptError#instance_eval < Object#instance_eval SignalException#instance_eval < Object#instance_eval SDBM#instance_eval < Object#instance_eval Shell#instance_eval < Object#instance_eval SystemExit#instance_eval < Object#instance_eval String#instance_eval < Object#instance_eval Symbol#instance_eval < Object#instance_eval Shell::Filter#instance_eval < Object#instance_eval StringScanner#instance_eval < Object#instance_eval SimpleDelegator#instance_eval < Object#instance_eval Sync#instance_eval < Object#instance_eval Synchronizer#instance_eval < Object#instance_eval SecurityError#instance_eval < Object#instance_eval SyntaxError#instance_eval < Object#instance_eval SystemStackError#instance_eval < Object#instance_eval SyncEnumerator#instance_eval < Object#instance_eval Struct#instance_eval < Object#instance_eval StandardError#instance_eval < Object#instance_eval StringIO#instance_eval < Object#instance_eval Set#instance_eval < Object#instance_eval SystemCallError#instance_eval < Object#instance_eval --- instance_eval(expr, filename = '(eval)', lineno = 1) --- instance_eval {|obj| ... } オブジェクトのコンテキストで文字列 expr を評価してその結果を 返します。 (以下略)
速度は、平均的なとこでこのくらい。
~ % time refe2 arr map >/dev/null refe2 arr map > /dev/null 0.13s user 0.02s system 98% cpu 0.153 total
最悪の場合でもこれくらい。
~ % time refe2 s instance_eval >/dev/null refe2 s instance_eval > /dev/null 0.25s user 0.02s system 98% cpu 0.275 total
さすがに ReFe1 よりは遅いけど、 ReFe1 はエントリ数が少なすぎるので公平じゃないか。
~ % time refe string index >/dev/null refe string index > /dev/null 0.05s user 0.01s system 71% cpu 0.080 total ~ % time refe2 string index >/dev/null refe2 string index > /dev/null 0.14s user 0.02s system 98% cpu 0.161 total ~ % time ri -T String.index >/dev/null ri -T String.index > /dev/null 0.46s user 0.08s system 98% cpu 0.545 total
ri よりは数倍速いのでいいとしよう。
(00:46)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.