[#41278] [BUG:1.9] BINARY should not be ASCII-compatible — Yugui <yugui@...>

WXVndWkbJEIkRyQ5ISMbKEIKCgo+IBskQiRHISIkKiQqJGAkTSQzJDMkXiRHJE41RE9AJEclKyVQ

15 messages 2010/05/11

[#41407] [Bug #3339] win32ole test failure — Usaku NAKAMURA <redmine@...>

Bug #3339: win32ole test failure

20 messages 2010/05/25
[#41411] Re: [Bug #3339] win32ole test failure — Masaki Suketa <masaki.suketa@...> 2010/05/25

助田です。

[#41412] Re: [Bug #3339] win32ole test failure — "U.Nakamura" <usa@...> 2010/05/25

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

[ruby-dev:41470] Re: NoMethodErrorなどのmessage

From: Yukihiro Matsumoto <matz@...>
Date: 2010-05-30 06:19:10 UTC
List: ruby-dev #41470
まつもと ゆきひろです

In message "Re: [ruby-dev:41329] NoMethodErrorなどのmessage"
    on Sun, 16 May 2010 23:06:00 +0900, Masatoshi SEKI <[email protected]> writes:

|ちょっと前からRWikiというWiki風のアプリケーションを
|書いています。
|たくさんのオブジェクトを参照しているRWikiのオブジェクトに、
|irbで対話的にメッセージを送ることがよくあるのですが、
|その際にメソッド名を間違えるととても長い時間待たされて
|困っています。

もうちょっと状況を説明してください。

まず、inspectを避けるかどうかを考える前に、NameError系はまさ
にこのような「とても長い」処理を避けるために、to_strを遅延し
ています。例外を印字しようとするなど明示的に要求しない限り、
to_strを呼ばないはずです。ということは、本来

|この関数はMarshalの際にも呼ばれるようで、dRubyで例外が
|あがる際にもエラーを印字しない場合にも長い時間がかかります。

のように「印字しない場合にも呼ばれる」ということは起きないは
ずです。にもかかわらず、長い時間がかかると言うのは、dRubyが無
駄にmessageを取り出しているのではないでしょうか。でなければ、
バグです。まずはここから考えたいです。

あと、「とても長い」も興味深い点です。これは1回1回の時間はさ
ほどでもないが、繰り返すので蓄積されて結果的に「とても長い」
のでしょうか、それともdRubyの性質上、inspectが内部で呼び出す
to_sなどがネットワークを越えるので、「とても長い」のでしょう
か。もし、後者であれば、dRuby側でプロクシーに仕掛けをして
dRubyオブジェクトのinspectはネットワークを越えないようにする
手もありますよね。

|それで提案です。
|
|inspectは呼ばずに、いつもrb_any_to_s()、あるいは
|
|#<クラス名:オブジェクトid> 
|
|の形式(なんていうの?)をメッセージに入れるのはどうで
|しょうか?

それだとnilやfalse、Fixnumのようなものまで

#<クラス名:オブジェクトid> 

になっちゃいますからねえ。

                                まつもと ゆきひろ /:|)

In This Thread