トップ «前の日記(2005-06-25) 最新 次の日記(2005-06-27)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2005-06-26

_ RjbでClass.forName

それはとても難しいツッコミです。問題点は2つあります。

1つは、Class.forName(String)って、Class.forName(String, true, this.getClass().getClassLoader())と等しくて、ではこのthisとは? と考えるとRjbなんですよね。で、thisを取るのに動くのはsun.reflect.Reflection.getCallerClassという、SunのJ2seの内部実装そのもので多分、スタックを戻ってthisを取ってくる仕組みになってたり。でもRjbはJavaから見たらVMからの呼び出しと等しいから結局ClassLoaderとしてnullを与えたことになってしまい、この状態はJ2SEのClass#forNameでは規定されていない(少なくてもSystemClassLoaderが利用されるわけではないことはわかるけど)のでもにゃもにゃとClassNotFoundExceptionになるんでしょう。(J2SEの配布ソースまでは追ったけど、sunの実装はまで追ってないのでとりあえずここまで)

2つ目はimportで取って来たのとClass.forName(String, boolean, ClassLoader)で取って来たのではRjbの内部処理が異なってnewが呼べなかったり(でも、これは戻り値がClassだったらimportと同等の処理を走らせれば良いから大した問題じゃないか)。

2つ目はともかく、1つ目はRjbが内部でimportに置き換えるのが良いかな?

_ MacでRjb

なんか、最後のテスト(_が付いた定数の処理)が引っかかるな。それとsize_tが見つからないみたいで#include <unistd.h>が必要になったけど、なんなんだろう? と言いながら真剣に追う気にはならないのだが。

とりあえずメモ。

mswin32とLinuxでは問題なくmakeもテストも動くんだが(待てよ、両方ともJ2SE 1.4.2だ。それか?)。

#あと、javahの動作が変だ。以前からなのかな(他のプラットフォームではたまたま動かなくて済んでいるとか)。その意味ではmakeの動作も多少違うのかも。

なんてことやってる閑があるなら、ツッコミのほうの問題をやれと、思いながらも今はそれはできない。

本日のツッコミ(全5件) [ツッコミを入れる]
_ ryugate (2005-06-26 09:12)

「Rjbが内部でimportに置き換える」はちょっと困ります。<br>S2コンテナからインターフェースを取得する際に、<br>getComponentにClassオブジェクトを与えるのですが、現在はimportで得られたインスタンスではなく、forNameで取得したものを、与えないとだめだったからです。

_ arton (2005-06-26 09:54)

むしろ、そこを修正すべきかも知れません。<br>importで取って来たClassのインスタンスのRuby側から見えるものと、JVMに渡すものをRjbが正しく変換できていないという問題だと思うからです。<br>そこが修正できるとforName(String)はフックしてimportに置換することで丸く収まります。<br>で、どのようにだめだったのでしょうか?

_ ryugate (2005-06-26 11:20)

なるほど、了解しました。RjbQandAに再現スクリプトと実行結果を書きました。どうやら、S2(JAVA)からはNullと見えているようです。

_ arton (2005-06-26 11:35)

おお、ありがとうございます。<br>そうか、Classの場合メタデータだけを確保してインスタンスをnullにしているのに、そちらをJVMへ与えてしまっているんだろうな。というか、そのあたりの管理が試行錯誤し過ぎて錯綜しているというのは0.2.1の修正時にわかったからどうにかなりそうです。<br>すぐ、と言いたいところですが、色々詰っているので最悪今週末(次の金曜か土曜)までお待ちください。

_ ryugate (2005-06-26 13:33)

早速ありがとうございます。急ぎませんので、artonさんのペースでまったくかまいません。ご心配なく。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|

ジェズイットを見習え