GNU Compiler for Java (GCJ)について
GNU Compiler for
Java(GCJ)は、かつて
GNUプロジェクトによって開発された
Javaプログラミング言語用のフリーな
コンパイラです。GCJは、GNU Compiler Collection(GCC)に統合されており、
Javaの
ソースコードをコンパイルし、
Java仮想マシン用のバイトコードまたはネイティブマシン語を生成することができました。さらに、GCJは
JavaクラスファイルやJARファイル全体を
機械語にコンパイルする機能も備えていました。
GCJは、主に
GNU Classpathプロジェクトから派生した
ランタイムライブラリを使用しており、
Javaアプリケーションを動作させるために必要な基本的なコンポーネントが揃っていました。しかし、GCJの開発過程において、特に2007年にはAWT(
Abstract Window Toolkit)と
Swingという2つのグラフィカルAPIのサポートに多くのリソースが費やされても、AWTのサポートは不完全なままでした。
GCJの開発はおおよそ
Java 1.4まで進み、ジェネリクスやアノテーションのような、それ以降の重要な機能に関するサポートは欠けていました。また、
GNU Classpathは
Java 1.2の機能セットに完全には達しておらず、現在では開発が完全に停止したと考えられています。実際、2015年以降、新たな開発の発表は行われず、GCJは製品としてのメンテナンスモードに移行しました。
2016年には、GCJがGCCのtrunkから削除されるという決定が下され、これに伴いGCJを含まないGCC 7.1がリリースされました。GCJが最終的に含まれたリリースはGCC 6であり、この時点でGCJの公式なサポートは終了しました。
CNI (Compiled Native Interface)
GCJには、CNI(Compiled Native Interface)という独自の
ソフトウェアフレームワークがあり、これは
C++で記述されたネイティブアプリケーションやライブラリを
Javaコードと相互に呼び出せるようにするものです。CNIは、
Java仮想マシンで一般的に採用されているJNI(
Java Native Interface)と類似していますが、CNIの作成者たちはしばしばJNIに対するいくつかの利点を主張しています。
CNIの開発者たちは、「
Javaは標準的なコンパイル技術を使った、別のプログラミング言語に過ぎない」といった考え方に基づき、
Javaの実装においてCNIを優れた手段とみなしています。そのため、GCCベースの言語実装においては互換性が重要です。
Javaの呼び出し規約は、他の言語、特に
C++での使用と可能な限り整合性を保つべきです。
このようにCNIは、
Javaと
C++が同一の呼び出し規約とオブジェクト配置を共有し、バイナリ互換性が確保された環境を提供することを目的とした補助的な関数や規約のセットを形成しています。これは単純化された説明ですが、極めて正確な表現でもあります。これらの要素が組み合わさって、GCJおよびその関連技術が形成されていました。
関連項目
外部リンク