[#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:41329] NoMethodErrorなどのmessage

From: Masatoshi SEKI <m_seki@...>
Date: 2010-05-16 14:06:00 UTC
List: ruby-dev #41329
咳といいます。

助けて下さい。

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

1.8系のerror.cを見るとname_err_mesg_to_str()で

            d = rb_protect(rb_inspect, obj, 0);
            if (NIL_P(d) || RSTRING(d)->len > 65) {
                d = rb_any_to_s(obj);
            }
            desc = RSTRING(d)->ptr;

のように、一度inspectした結果が長いときに、to_sの結果を
メッセージとするようです。

件のように大きな(?)オブジェクトの場合には、長い時間を
かけてinspectして、それを捨ててto_sすることになります。

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


それで提案です。

inspectは呼ばずに、いつもrb_any_to_s()、あるいは

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

の形式(なんていうの?)をメッセージに入れるのはどうで
しょうか?


現状のようにinspectの長さに応じて表記が変わるのであれば、
エラーメッセージから機械的に元のオブジェクトを
求めるのは難しそうですから、メッセージを処理してる
ひとも少ないと想像してます。



In This Thread

Prev Next