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 ]