Date: Sun, 4 Jan 98 19:36:31 JST From: SHUDOH Kazuyuki Subject: [JavaHouse:6481] Java-to-C translation (Re: Linux and java) To: java-house at center.nitech.ac.jp (JavaHouse ML) Message-Id: <199801041038.TAA04656@cafe.olu.info.waseda.ac.jp> 首藤です。 JavaHouse-Brewers に投げようかとも思いましたが、 フォローする文章と同じく JavaHouse にします。 山田@IMACY さん wrote: 山田> ところで、先日、Linux での Java 開発環境をどこまで加速できるかを 山田> 実験し、以下のものを試してみました。 山田> toba-1.0b6 - 1.0.2 準拠の Java-to-C トランスレータ C 言語への変換でしたら、Harissa がおすすめです。 http://www.irisa.fr/compose/harissa/harissa.html method inlining などで、メソッド呼び出しをかなり減らしてくれます。 ただ、公開されているのは SunOS4,5, Linux などのバイナリのみです。 こういった、Java VM や C へのトランスレータに関する情報を、風間さんが http://www.ingrid.org/java/vm/ にまとめていらっしゃいます。 高木さんが [JavaHouse-Brewers:10584] に書いた文章が元です。 C 言語、果てはプロセッサネイティブなコードへのトランスレータは 高速化に非常に有効です。 現在、どのトランスレータ (Harissa, Toba, j2c) も JDK 1.0.2 対応で止まっています。 今後にも期待しているのですが、同時に、 1.1 以降に対応することはないのではないかと予測しています。 作成が大変なのは Java to C の変換部ではなくて (大変だけど…)、 JDK では native methods で実現されている部分の実装だと思います。 Java Platform API が日に日に肥大化しているとはいっても、 一旦 Java to C トランスレータさえ作ってしまえば、 クラスライブラリを C に変換すればそれで済みます。 けど、JDK で native methods で実現されている部分は、 独自に実装する必要があります。j2c も Toba も Harissa も、 JDK 1.0.2 が native methods で実現している部分に対応する 独自ライブラリを用意しています。 独自ライブラリが対応していない機能は、C に変換するプログラムでは使えません。 例えば、Toba では java.lang.Class#forName() を使えません。 1.0.2 から 1.1 になって、native methods で実現されている 部分も非常に大きくなりました。 /usr/local/jdk*/lib/ の下の方にある lib*.so を見て下さい。 このほとんどを、Harissa, Toba の開発グループが独自実装する必要があります。 JDK で native methods で実現されている部分を、Java to C トランスレータの開発グループが独自実装しなくてもよいために、 ・JDK に含まれる native methods をそのまま使う という方法を思いつきました。 しかし、JDK が含む native methods は JDK の JavaVM の構 造に依存しています。すべてをそのままトランスレータから利 用するのは難しいと思います。#可能だろうか? JDK が含む native methods がすべて JNI で書かれていれば JavaVM の構造には依存しないのではないか?とも思います。 Sun が、JDK 中の native methods について ・JavaVM の構造に深く依存するもの == トランスレータ開発者が独自実装する必要があるもの ・完全に JNI に準拠しているもの == トランスレータからも利用可能 (かもしれない) の区別をしてくれると嬉しいです。 ただ、C への変換は、Sun の掲げる "Write Once Run Anywhere" に反するので、C への変換について Sun の協力を望めるかはわかりません。 #山田さん、@早稲田でしたよね。 SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp