[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:210

From: SASADA Koichi <ko1 atdot.net>
Date: Thu, 16 Sep 2004 17:42:12 +0900
Subject: [yarv-dev:210] Re: return from orphan Proc object

  MAEDA Atusi <maeda-yarv atusi.org> wrote :
    [ [yarv-dev:207] Re: return from orphan Proc object ]
    at 16 Sep 2004 17:19:46 +0900

 ささだです.

> ささださんが意図している最適化は、
> ・呼び出し側がProc.newを使わず { ... } を渡し、
> ・かつ、呼び出される側が暗黙の引数で受けとった時に、
> 一人前のProcを割り当てずに軽いもの(Lispの世界だとeasy closureとか呼ん
> だりする)だけ作って済まそうというものだと思います。

 はい.そのとおりです.Ruby の場合,一般的には easy closure
ばかりが利用されるんじゃないかなー,と想像してます.


> 呼び出される側は、FullProcとEasyProcを区別せずにyieldできるのでしょう
> か?  もし区別が必要だとすると、iterator側では両方のコードを用意するの
> でしょうか、それともどちらかにcanonicalizeするのでしょうか?

 区別が必要なのは,yieldするときで,その yield 1命令だけが,
頑張ってそれぞれの処理を振り分ければ問題ないと考えています.
特に,その振り分け自体が難しいとも思えません.

Insn yield{
  block = GET_BLOCK();

  if(CLASS_OF(block) == Proc){
    Proc な yield
  }
  else if(CLASS_OF(block) == Block){
    Block な yield
  }
}


> どうせ多くの場合FullProcにcanonicalizeすることになるんじゃないか、だと
> したらEasyProc なんて用意する意味はないんじゃないか、という意図です。

 私は上記のとおり,根拠もなく easy なのばっかりじゃん? と
思っていたので,一度しっかり検証する必要はあるかもしれません.

 Ruby で Proc って,ほんとにそんなに使うかなぁ?

  x.times{|i|
    hogehoge
  }

 はよく使いますけど,Proc オブジェクトを生成する必要はない
ですよね.

 というわけで,期間中にベンチマークプログラムを作って調べて
みます.

 あー,ベンチマーク用の何かも集めたりしないといけなかったなぁ.


> また、「EasyProcを作って渡したけれど、呼び出された側は名前のある引数で
> 受けとった」とすると、それをチェックしてFullProcに変換しなければなりま
> せんよね。最初から何も考えずにFullProcを作る場合よりオーバーヘッドがか
> かります。

 EasyProc 生成のコストは 0 なので,「よりオーバーヘッドが増える」
ということはないと思います.

	def m cond
	  a = 1
	  if cond
	    iter{
	      ...
	    }
	  else
	    ...
	  end
	end

	m

 のようなコードがあったとき,m を実行した瞬間 m の環境をヒープ
に移すということですよねぇ.あれ,iter を実行した瞬間に,m の環
境を保存?


> いずれにせよ、EasyProcを作るなんていう最適化は完全にoptionalですから、
> 後回しにして良いんではないかと思います。

 実は,さきにそっちを作っちゃったんです orz.楽だから.


-- 
// SASADA Koichi at atdot dot net
//

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       185 2004-09-15 21:12 [ko1 atdot.net       ] return from orphan Proc object          
       187 2004-09-15 22:02 ┣[maeda-yarv atusi.org]                                       
       188 2004-09-16 01:01 ┃┗[matz ruby-lang.org  ]                                     
       190 2004-09-16 01:45 ┃ ┗[ko1 atdot.net       ]                                   
       192 2004-09-16 02:13 ┃  ┗[matz ruby-lang.org  ]                                 
       193 2004-09-16 07:53 ┃   ┗[ko1 atdot.net       ]                               
       194 2004-09-16 08:14 ┃    ┗[matz ruby-lang.org  ]                             
       195 2004-09-16 08:37 ┃     ┣[ko1 atdot.net       ]                           
       196 2004-09-16 08:50 ┃     ┃┣[matz ruby-lang.org  ]                         
       198 2004-09-16 12:11 ┃     ┃┗[maeda-yarv atusi.org]                         
       202 2004-09-16 16:32 ┃     ┃ ┗[ko1 atdot.net       ]                       
       211 2004-09-16 17:52 ┃     ┃  ┗[maeda-yarv atusi.org]                     
       214 2004-09-16 18:02 ┃     ┃   ┗[ko1 atdot.net       ]                   
       197 2004-09-16 11:47 ┃     ┗[maeda-yarv atusi.org]                           
       199 2004-09-16 14:04 ┃      ┣[matz ruby-lang.org  ]                         
       200 2004-09-16 16:23 ┃      ┃┣[ko1 atdot.net       ]                       
       204 2004-09-16 16:58 ┃      ┃┃┣[matz ruby-lang.org  ]                     
       208 2004-09-16 17:22 ┃      ┃┃┃┗[ko1 atdot.net       ]                   
       209 2004-09-16 17:30 ┃      ┃┃┃ ┗[matz ruby-lang.org  ]                 
       212 2004-09-16 17:53 ┃      ┃┃┃  ┗[ko1 atdot.net       ]               
       216 2004-09-16 18:18 ┃      ┃┃┃   ┗[matz ruby-lang.org  ]             
       207 2004-09-16 17:19 ┃      ┃┃┗[maeda-yarv atusi.org]                     
->     210 2004-09-16 17:42 ┃      ┃┃ ┗[ko1 atdot.net       ]                   
       213 2004-09-16 18:01 ┃      ┃┃  ┣[maeda-yarv atusi.org]                 
       219 2004-09-16 18:24 ┃      ┃┃  ┃┗[ko1 atdot.net       ]               
       224 2004-09-17 00:21 ┃      ┃┃  ┃ ┗[maeda-yarv atusi.org]             
       225 2004-09-17 00:45 ┃      ┃┃  ┃  ┗[ko1 atdot.net       ]           
       226 2004-09-17 12:02 ┃      ┃┃  ┃   ┗[maeda-yarv atusi.org]         
       227 2004-09-17 12:11 ┃      ┃┃  ┃    ┣[ko1 atdot.net       ]       
       228 2004-09-17 13:38 ┃      ┃┃  ┃    ┗[ko1 atdot.net       ]       
       218 2004-09-16 18:22 ┃      ┃┃  ┗[matz ruby-lang.org  ]                 
       220 2004-09-16 18:31 ┃      ┃┃   ┗[ko1 atdot.net       ]               
       221 2004-09-16 19:03 ┃      ┃┃    ┗[matz ruby-lang.org  ]             
       222 2004-09-16 19:08 ┃      ┃┃     ┗[ko1 atdot.net       ]           
       223 2004-09-16 19:12 ┃      ┃┃      ┗[ko1 atdot.net       ]         
       201 2004-09-16 16:33 ┃      ┃┗[maeda-yarv atusi.org]                       
       206 2004-09-16 17:01 ┃      ┃ ┗[matz ruby-lang.org  ]                     
       215 2004-09-16 18:06 ┃      ┃  ┗[maeda-yarv atusi.org]                   
       217 2004-09-16 18:20 ┃      ┃   ┗[matz ruby-lang.org  ]                 
       203 2004-09-16 16:38 ┃      ┗[ko1 atdot.net       ]                         
       189 2004-09-16 01:04 ┗[matz ruby-lang.org  ]                                       
       191 2004-09-16 01:51  ┗[ko1 atdot.net       ]                                     
       205 2004-09-16 16:58   ┗[ko1 atdot.net       ]