2011年2月11日

[ruby-list:47862] リテラルの式展開の速度?

初心者ですが、要望があって投稿します。

正規表現で繰り返し使用するリテラルを変数または定数の中に格納しておき、それを #{...}
で展開して使用したいのですが、この式展開はあまり速くないように見えます。例えば、

n = 1000000
C0 = '\s\|\s'
line0 = "abc | 123"


time0 = Time.now()
for i in 0..(n-1)
/\s\|\s/ =~ line0
end
time1 = Time.now()

time2 = Time.now()
for i in 0..(n-1)
/#{C0}/ =~ line0
end
time3 = Time.now()

$stderr.print (time1 - time0), "\n"
$stderr.print (time3 - time2), "\n"

というコードを走らせると、最初のループと次のループの実効速度には一桁以上の差が見られます。変数のリテラル展開は毎回変数の評価が必要なので、しかたがないと思うのですが、定数はスクリプトのコンパイル時に評価できるはずなので、直接リテラルを記述するのと同程度にできるのでは?と思います。

初心者の思い違いかも知れませんが、将来改善していただけると大変ありがたく思います。

--
俊(とし)

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




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