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

yarv-dev:30

From: SASADA Koichi <ko1 atdot.net>
Date: Tue, 18 May 2004 08:14:57 +0900
Subject: [yarv-dev:30] method search function using global method cache


 ささだです。

 ruby が使っているグローバルメソッドキャッシュを利用したメソッド検索
APIってないですか?


 ruby#eval.c を眺めていてやっと気づいたんですが、rb_method_node() って、
グローバルメソッドキャッシュを利用しないのですね。

 EXPR1 の文字を見つけて、ああキャッシュ使ってる、と勘違いしてしまいま
した。毎回メソッドを表引きしてたら遅いはずだ。

 というわけで、昨日投げたインラインメソッドキャッシュの有効性、という
のは完全に間違えてました。

 eval.c が提供しているグローバルメソッドキャッシュによるメソッド検索
を外から(拡張ライブラリから)利用する方法はないでしょうか。私が探し
てみたところ見つからなかったので。rb_method_boundp は検索結果を返さな
いっぽいし。


 yarv の中でグローバルメソッドキャッシュを新しく作るしかないかなー。


 そういえば、rb_method_node って配布物中では使われてないですね。grep
した限りでは。


 いっそこんな感じとか。

Index: eval.c
===================================================================
RCS file: /src/ruby/eval.c,v
retrieving revision 1.663
diff -u -r1.663 eval.c
--- eval.c	14 May 2004 16:45:21 -0000	1.663
+++ eval.c	17 May 2004 23:13:02 -0000
@@ -452,6 +452,12 @@
     ID id;
 {
     int noex;
+    struct cache_entry *ent;
+  
+    ent = cache + EXPR1(klass, mid);
+    if (ent->mid == id && ent->klass == klass && ent->method){
+	return ent->body;
+    }
 
     return rb_get_method_body(&klass, &id, &noex);
 }

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

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

->      30 2004-05-18 08:14 [ko1 atdot.net       ] method search function using global method cache
        31 2004-05-18 08:17 ┗[ko1 atdot.net       ]                                       
        33 2004-05-18 08:56  ┗[matz ruby-lang.org  ]                                     
        34 2004-05-18 09:16   ┗[ko1 atdot.net       ]