えんどう
yasuy****@javao*****
2005年 1月 2日 (日) 11:28:07 JST
えんどうです。 >ところでここでやりたいことが、既存のJava実装で提供されている >JNIとGaucheのブリッジを作ることで、外部のJava VMとGaucheの >間で相互に呼び出しができるようにする、ということだとすると(*)、 欲しくなった動機はThe Project Looking Glassです。 https://lg3d.dev.java.net/ これはJavaで書かれたデスクトップ環境で、 3Dオブジェクトがデスクトップ環境でシームレスに動作します。 この環境にはまだスクリプト言語がないので、 Gaucheで用のJNIラッパーを書いてJava VMをロードしたり、 Java APIを利用したりできれば便利に思いました。 >その設計の選択によっては、JNIのAPIそのものをGaucheレベルに >見せない方が良い (高レベルのAPIのみ見せる) 可能性もあるんじゃないか >という気がします。 JNIではなくもっと上のレベルでバインディングするやり方でしょうか。 >どのJava実装をターゲットにするのかと、GCをどうするかについて >具体的な案はありますか。 Java VMバージョンは 1.5 を考えています。<http://java.sun.com/j2se/1.5.0/> GCに関しては、 Java 側で確保されたメモリーをGauche側が開放してしまうのはまずいですが、 GCの対象にしない方法は選択できますでしょうか? JavaからGaucheを呼び出すことは考えていなかったのですが、 JNIではクラスローダーがネイティブライブラリをアンロードするとき JNI_OnUnloadという関数が呼ばれる仕様らしい http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jni/spec/invocation.html#JNI_OnUnload ので、もしJavaからGaucheを呼び出すならこれに対応する必要がありそうです。 あとJavaが参照しているGauche側オブジェクトがGauche側でGCされちゃうのも まずいのですね。JNIを経由する限り直接参照しないとは思いますが。 -- ENDO Yasuyuki <yasuy****@javao*****> http://www.javaopen.org/~yasuyuki/ http://www.javaopen.org/jfriends/