GNU Compiler for Java

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 ClasspathJava 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は、JavaC++が同一の呼び出し規約とオブジェクト配置を共有し、バイナリ互換性が確保された環境を提供することを目的とした補助的な関数や規約のセットを形成しています。これは単純化された説明ですが、極めて正確な表現でもあります。これらの要素が組み合わさって、GCJおよびその関連技術が形成されていました。

関連項目



外部リンク


もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。