From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2002-11-06T21:12:48+09:00 Subject: [ruby-dev:18665] Re: new scope-in-state [Re: import-module (Re: Re: scope-in-state)] けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev:18609] the message: "[ruby-dev:18609] Re: new scope-in-state [Re: import-module (Re: Re: scope-in-state)]", on Oct/30 16:11(JST) Shin-ichiro HARA writes: >原です。 >お久しぶりです。南の島から戻りました。体はずいぶん前から戻ってますが、 >頭の方も徐々に戻しています。 ご復帰おめでとうございます. >例の scope-in-state, import-module 問題の続きです。 うーん. 懐かしい... >新たに import-module Ver.0.74 別名、import-module turbo:-) というのを >作ってみました。結果は次の通り (ruby 1.6.7 (2002-07-11)[i386-cygwin] >Windows2000): (中略) なんだか, 頑張りましたねぇ... >でした。これって import-module の初期バージョンに対して 200 倍ぐらいの >スピードになったんですよ。turbo でしょう。 確かに(^^;; >中身ですが、scope-in-state を大分参考にしました(っていうか独立に作っ >たつもりが、最終的にはそっくり)。scope-in-state は、実に細かいオプティ >マイズがされてて、驚きました。私もプロファイラと睨めっこしたんですが、 >どうしても速くならない。最終的にはやはり *arg の展開のところがネックだっ >たと気づいたのですが、この展開の所は、標準の profile.rb では出力されま >せんよね、、、 ですね. > >で実体を呼び出していたのですが, プロファイラを見て調べてみると, *argで > >受けるところで配列が生成されるので, そこで呼び出しコストが発生していた > >みたいで, >ということは、石塚さんの使ってるプロファイラは何なのかな? プロファイラは標準添付のを使いました. あれって2段階のメソッド呼び出し なわけですが, ただ, 2回メソッドを呼び出すスクリプトと比べると, どう考 えても, 遅いのでいろいろ試した結果発見しました. >ところで、 import-module が行っているのは、scope-in-state の(勝手に命 >名させてもらうと)「代理継承列法」のパクリの、Hash による(今、命名し >た)「擬代理継承列法」です。ついでに、import-module-pip.rb という代理 >継承列法バージョンも作ってみました。LOOPS の結果: うーん(^^;;; >です。import-module-pip が 20% 近く遅いのは、ちょっと差がありすぎのよ >うな気がするんですが、もしかすると次のような scope-in-state の仕様のせ >いかもしれません。 > >----------------------------- >require "scope-in-state" >class Foo > def foo; p "Foo"; end >end > >module S > module Foo > def foo; p "S"; end > end >end > >module T > module Foo > def foo; p "T"; end > end >end > >ScopeS = ScopeInState.new(S) >ScopeT = ScopeInState.new(T) >foo = Foo.new >ScopeS.scope_in do > ScopeT.scope_in do > ScopeS.scope_in do > foo.foo # -> "T" ?? > end > end >end >----------------------------- > >?? が "S" でないのは、モジュールが一つの(代理)継承列で一回しか include >できないせいなので、直接メソッド定義を eval すればいいと思います。そうす >ると SCOPES の差は縮まる気がするのですが、実際はわかりません。 うーん. こんな問題があったんだ... 気が付かなかった(^^;;; >と、さんざんこねくり回しておいて、いまさらこんなこと言うのも何なんです >が、最初コンセプトの話だったはずがいつのまにか実装のでのスピード競争み >たいになってしまって、これがどのぐらい意味があるかちょっと疑問ですね。 確かにいえるかも. >そもそも LOOPS と SCOPES という2つテストが極端すぎて適切でない、とい >うか、もっと別のケースも考慮すべきですよね。特に LOOPS の方は、OS や >CPU によってもずいぶん結果が違うし、実は import-module.rb, >import-module-pip.rb には、決して使われない関数が定義されているのです >が、それを削るとなぜか有意の差で遅くなるんです。ファイル名を変えても差 >がでる。これはもう異常な世界です(^^;。 うーん.... >さしあたって、かなり実用性あるものができたのは良かったかな。 ですね. それだけはいえるかな. scope-in-stateの方ですが, 実際に使ってみようとチャレンジしたのですが, 思ったより使いこなしが難しく, このままでは, 使いこなせないことに気が付 きました(^^;;; で, どうしたらよいかと悩んでいるところです. とはいえ, 最近全然やっていないんですが. 原さんが音信不通になってからや る気がうせてしまいました(^^;;; __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju@rational.com <<---