2007年12月21日

[ruby-list:44374] Re: Rake 改善プロジェクト

斎藤と申します。

ものすーんごーい話がそれますが、

On Thu, 20 Dec 2007 05:24:57 +0900
rubikitch@xxxxx wrote:

> Rake::Task[:clobber].instance_eval{@actions = []}


インスタンス変数をいじるだけならば、Object#instance_variable_setが無難
そうです。

class C
def initialize
@c = nil
end
end
c = C.new

{
"set" => proc{ c.instance_variable_set(:@c,1) },
"eval" => proc{ c.instance_eval{ @c = 1 } }
}.each do |name, pr|
puts name.ljust(8) + Benchmark.measure{500_000.times(&pr)}.real.to_s
end

とかやると、手元のRuby 1.8.6-p111では

set 0.487169027328491
eval 1.45795607566833

となり、3倍高速です。ちょっと書きづらいけど。

# instance_variable[](sym)とか[]=(sym, newval)とかがないのはやはり
# 設計による意図的なものでしょうか…。
# instance_variableって綴る時点で十分長ったらしいと思うので、
# 自分はあってもいいような気がします。

--
斎藤ただし

投稿者 xml-rpc : 2007年12月21日 02:33
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/67870
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。