[#37249] ruby 1.8でのCGI#[]の挙動 — 堀川 久 <vzw00011@...>

こんにちは。

14 messages 2003/03/09

[#37283] 両方の式とも常に評価する論理和・論理積 — Shinya Kawaji <kawaji@...>

かわじ、です

17 messages 2003/03/13

[#37324] optparse は使いやすいですか? — 成島 寛則 <narushima@...>

こんにちは。Narushima Hironori と申します。

13 messages 2003/03/15

[#37370] Secure「ではない」script の書き方 — satoru takahashi <hisai@...>

高橋聡@JFプロジェクトで翻訳しています、です

50 messages 2003/03/20
[#37381] Re: Secure「ではない」script の書き方 — satoru takahashi <hisai@...> 2003/03/20

高橋聡です

[#37382] Re: Secure「ではない」script の書き方 — matz@... (Yukihiro Matsumoto) 2003/03/20

まつもと ゆきひろです

[#37405] Re: Secure「ではない」script の書き方 — Taku Nakajima <tnakajima@...> 2003/03/24

[#37407] Re: Secure「ではない」script の書き方 — matz@... (Yukihiro Matsumoto) 2003/03/24

まつもと ゆきひろです

[#37414] Re: Secure「ではない」script の書き方 — Taku Nakajima <tnakajima@...> 2003/03/25

[#37415] Re: Secure「ではない」script の書き方 — matz@... (Yukihiro Matsumoto) 2003/03/25

まつもと ゆきひろです

[#37417] Re: Secure「ではない」script の書き方 — Taku Nakajima <tnakajima@...> 2003/03/25

[#37421] Tmpfile.newがデフォルトで/tmpを利用すること — Tadatoshi Kamimura <kamimura.tadatoshi@...>

上村と申します。はじめまして。

35 messages 2003/03/26
[#37422] Re: Tmpfile.newがデフォルトで/tmpを利用すること — WATANABE Hirofumi <eban@...> 2003/03/26

わたなべです。

[#37467] Re: Tmpfile.newがデフォルトで/tmpを利用すること — Tadatoshi Kamimura <kamimura.tadatoshi@...> 2003/03/31

上村です

[#37468] Re: Tmpfile.newがデフォルトで/tmpを利用すること — "Akinori MUSHA" <knu@...> 2003/03/31

At Mon, 31 Mar 2003 09:51:27 +0900,

[#37470] Re: Tmpfile.newがデフォルトで/tmpを利用すること — Tadatoshi Kamimura <kamimura.tadatoshi@...> 2003/03/31

上村です。

[#37472] Re: Tmpfile.newがデフォルトで/tmpを利用すること — "Akinori MUSHA" <knu@...> 2003/03/31

 なるほど、 $SAFE=1 のところをすっぱり読み飛ばしてました。

[#37479] Re: Tmpfile.new がデフォルトで/tmpを利用すること — siena@... (Siena. / SHINAGAWA, Norihide) 2003/03/31

Siena. です。

[#37480] Re: Tmpfile.new がデフォルトで/tmpを利用すること — siena@... (Siena. / SHINAGAWA, Norihide) 2003/03/31

Siena. です。

[#37483] Re: Tmpfile.newがデフォルトで/tmpを利用すること — nobu.nakada@... 2003/04/01

なかだです。

[#37493] Re: Tmpfile.newがデフォルトで/tmpを利用すること — TAKAISHI Hayato <rio-t@...> 2003/04/02

こんにちは、高石です。

[#37496] Re: Tmpfile.new がデフォルトで/tmpを利用すること — siena@... (Siena. / SHINAGAWA, Norihide) 2003/04/03

Siena. です。

[#37499] Re: Tmpfile.new がデフォルトで/tmpを利用すること — matz@... (Yukihiro Matsumoto) 2003/04/03

まつもと ゆきひろです

[#37500] Re: Tmpfile.new がデフォルトで/tmpを利用すること — "U.Nakamura" <usa@...> 2003/04/03

こんにちは、なかむら(う)です。

[ruby-list:37301] Re: 両方の式とも常に評価する論理和・論理積

From: UENO Katsuhiro <unnie@...>
Date: 2003-03-13 15:22:50 UTC
List: ruby-list #37301
うえのです。

On Thu, 13 Mar 2003 23:29:13 +0900
nobu.nakada@nifty.ne.jp wrote:

> > > なぜか、「ローカル変数を使う」が最速です。
> > > 何回かやってみると、「正規表現をまとめる」が最速のこともありますが、
> > > まさか「ローカル変数を使う」が「戻り値を考慮しない」よりも
> > > 速いとは思ってみませんでした。
> > > (ベンチマークの取り方が間違っているんでしょうか?)
> >
> > おそらく、$~ を格納する場所をパース時に作る(ローカル変数を使用する方法)
> > か、実行時に作るか(正規表現を一つにまとめる)で差が出ているのでは
> > ないでしょうか。
>
> Perlと違って、$_,$~は常に用意されています。どちらかというと正規
> 表現のバックトラック関係のような気がしますが、はっきりしたこと
> は。

$_, $~ が用意されるのはローカル変数のスコープが生成されているとき
(= メソッド内にローカル変数があるとき) だけではないですか?
rb_backref_set から special_local_set が呼び出されるのが遅くなる
原因ではないかと推測したんですが…。

例えばこんなスクリプトを

require 'benchmark'

class String
  def foo
    gsub!(/\A\s+/,'')
    gsub!(/\s+\z/,'')
  end
  def foo2
    tmp1 = gsub!(/\A\s+/,'')
    tmp2 = gsub!(/\s+\z/,'')
  end
end

Test = [ "abc", "abc \r\n", "\n\t abc", "\n\t abc \r\n" ]

Benchmark.bm(12) { |x|
  [:foo].each {    # ここを :foo2 に書き換えてもう一度実行、比較
    GC.disable
    x.report(m.to_s) {
      5000.times { Test.each { |i| i.dup.send m } }
    }
  }
}

1.6.8 で動かしてプロファイルを取ってみると、foo2 よりも foo の
ほうが top_local_setup, top_local_init, local_cnt の3関数がそれぞれ
ちょうど2万回 (= Test.size * 5000) ずつ多く呼び出されています。
ruby_xmalloc が呼ばれる回数も foo のほうが6万回多くなりました。

ローカル変数を使わないほうが遅い理由はこれではないかと思うのですが、
如何でしょう。


 --  ----  -     - - -- -
うえの かつひろ <unnie@blue.sky.or.jp>

In This Thread