著作一覧 |
やり直し。もっとまじめに作ってみることにして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ヘッドを試すとかやらないわけだし)。
重要なのは巨人の肩に乗り、他人の概念やアイデアの上に、改善を積み重ねていくことです。
『改善を積み重ねていくこと』をやらずに、ただそのまま利用するあるいはそれを勧める連中(as is野郎と言えば良いかも)がいかに多いことか。
ジェズイットを見習え |
せっかくなんで流行ればいいなぁ、位のノリです。<br>ちなみに、私も「まぁいいかかで済ませられる」んですけどね :-)
早いなぁ、というかTB撃ち損なったのを拾ったのかな。