GCJ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
GCJ (GNU Compiler for Java)はJava言語のためのフリーなコンパイラで、GCCの一部である。Javaソースコードをコンパイルし、Java仮想マシンのバイトコードまたはマシン語を出力する。また、バイトコードを格納したクラスファイルや、それらを格納したJAR全体をマシン語にコンパイルすることも出来る。GCJで使用されるほとんど全てのランタイムライブラリはGNU Classpathプロジェクトに由来する。
AWTとSwingの2つのグラフィカルAPIをGNU Classpathにサポートさせることに現在多くの労力が投入されている。AWTとSwingの両方のフルサポートは間近であり、AWT/Swingアプリケーションを実行するためにサン・マイクロシステムズから提供されたランタイムを使用する必要性は遠からずなくなる見通しである。
[編集] CNI (Compiled Native Interface)
CNI (Compiled Native Interface)は、ネイティブアプリケーションやC++で記述されたライブラリを、Javaコードとの間で相互に呼び出せるようにするためのGCJのためのソフトウェアフレームワークである。
これは多くのJava仮想マシンで標準とされているJNI(Java Native Interface)フレームワークに似ているが、CNIの作成者はJNIに対して幾つもの優位性を主張している。
我々はCNIをより良い手段だと考えて採用している。特に、標準的なコンパイル技術を使って実装されるもう一つのプログラミング言語に過ぎないとする発想に基づいたJava実装において、より良いと考える。それゆえ、そしてGCCを用いた言語実装は出来るだけ互換であるべきなので、Javaの呼び出し規約は、他の言語、特にC++で使用される規約に対して、実用性を損なわない範囲で極力似ていなければならない。なぜならC++は、JavaをC++のサブセットと考えることもできるためである。CNIは、単にC++とJavaは同じ呼び出し規約とオブジェクト配置を持ち、バイナリ互換である、という発想によるヘルパー関数と規約のセットである。(この説明は単純化されているが、十分に正確である)[1]