| 著作一覧 |
やり直し。もっとまじめに作ってみることにしてbenchmarkのrun.rbを使って461636バイトのyarvcore.bundeleで測ってみた。(まじめに作ってみるというのは、どうせならsumではなくcksumの1〜3まで実装しようかなと考えたということで、とりあえずは-o 1つまりsumしか実装してない)
class BsdSum
BLOCK_SIZE = 1024
def initialize()
@cksum = 0
@block_size = BLOCK_SIZE
end
def sum(s)
s.each_byte do |b|
if (@cksum & 1) != 0
@cksum >>= 1
@cksum |= 0x8000
else
@cksum >>= 1
end
@cksum += b
@cksum &= 0xffff
end
end
attr_reader :cksum, :block_size
end
#実際はオプションを見てアルゴリズムを変更するわけである
algorithm = BsdSum.new()
blk = 0
File.open('yarvcore.bundle', 'rb') do |f|
until (s = f.read(algorithm.block_size)).nil?
blk += 1
algorithm.sum(s)
end
end
#printf("%d %d %s\n", algorithm.cksum, blk, 'yarvcore.bundle')
で、結果は
$ ruby -I. work/run.rb
ruby 1.9.0 powerpc-darwin7.7.0(2005-01-12)
YARVCore 0.1.0 rev: 120 (2005-01-09)
[direct threaded code] [optimize basic operation] [optimize regexp match] [stack caching] [inline method cache]
...(snip)...
--
user system total real
ruby 2.660000 0.020000 2.680000 ( 3.543170)
yarv 0.950000 0.010000 0.960000 ( 1.443204)
実際rubyで実行する3秒以上というのはずいぶんもっさりした動きなのだが、これが1秒(リアルだと3.5に対して1.5)になるということは相当大きい。
ちなみに本当のsumだとこんな感じ。
$ time sum yarvcore.bundle 48013 451 yarvcore.bundle real 0m0.074s user 0m0.000s sys 0m0.010s
あ、確かに試してみようとする人の役には立たなかったかも。
artonさんのエントリだと 「/usr/local/bin に ruby-1.9.0 いれちゃうのはイヤだなぁ」って人もいそうなので、極力通常の環境に影響しないやり方で。
あれだとautoconfからmake installまですっ飛ばしてるし、元々libは1.9で別になるから単純にbinの位置だけ変える(DESTDIRだけ設定する)というのを想定してたので参考にはなりませんね。
僕が、まあいいかで済ませられるのは必要になったら
$ sudo rm -rf /usr/local/lib/ruby $ cd ruby-1.8.2 $ sudo make install
すりゃいいやってのがあるからだけど普通はそうではないでしょう(というか、事実そうではないからWin32マシンではcvsヘッドを試すとかやらないわけだし)。
ジェズイットを見習え |
せっかくなんで流行ればいいなぁ、位のノリです。<br>ちなみに、私も「まぁいいかかで済ませられる」んですけどね :-)
早いなぁ、というかTB撃ち損なったのを拾ったのかな。