| 開発者 | GNU プロジェクト |
|---|---|
| 初回リリース | 1998年9月6日[1] |
| 最終リリース | 6.5 [2]
/ 2018年10月26日 |
| オペレーティング·システム | Unixライク |
| タイプ | コンパイラ |
| ライセンス | GNU GPL |
| Webサイト | gcc.gnu.org |
GNU Compiler for Java ( GCJ ) は、Javaプログラミング言語用の廃止されたフリー コンパイラです。これはGNU Compiler Collectionの一部でした。[3] [4]
GCJはJavaソースコードをJava仮想マシン(JVM)バイトコードまたは多くのCPUアーキテクチャのマシンコードにコンパイルします。また、バイトコードを含むクラスファイルやJAR全体をマシンコードにコンパイルすることもできます。[5] [6]
歴史
GCJ ランタイムライブラリのオリジナルソースはGNU Classpathプロジェクトからのものですが、ライブラリ間にはコードの違いがありますlibgcj。GCJ 4.3 はフロントエンドとしてEclipse Compiler for Java を使用します。 [7]
2007 年には、Java の 2 つのグラフィカルAPI ( AWTとSwing )のサポートをGNU Classpathに実装するための作業が数多く行われました。AWT のソフトウェア サポートはまだ開発中です。「 AWTサポートが機能するようになれば、Swing サポートも検討できます。Swing のフリー ソフトウェアの部分実装が少なくとも 1 つあり、使用可能かもしれません。」[8] GNU CLASSPATH は Java 1.2 の状態まで完成することはなく、現在は完全に放棄されているようです。
2015年時点では、GCJからの新たな開発は発表されておらず、製品はメンテナンスモードにあり、オープンソースのJavaツールチェーンの開発は主にOpenJDK内で行われていました。[9] GCJは2016年9月30日にGCCトランクから削除されました。 [10] [11] GCJの削除は、GCC 7.1のリリース時に発表されましたが、これにはGCJは含まれていません。[12] GCJはGCC 6の一部として残っています。
パフォーマンス
GCJのコンパイル機能は、Javaコードをマシンコードにコンパイルするときに、JVMで起動される同等のバイトコードよりも起動時間が短くなるはずです。[13]
コンパイルされたネイティブ インターフェイス (CNI)
以前は「Cygnus Native Interface」と呼ばれていた Compiled Native Interface (CNI) は、Javaコードがネイティブアプリケーション (ハードウェアおよびオペレーティング システム プラットフォームに固有のプログラム) およびC++で記述されたライブラリを呼び出したり、ネイティブ アプリケーションおよびライブラリからJava コードが呼び出されたりできるようにする GCJ のソフトウェア フレームワークです。
CNI は、さまざまなJava 仮想マシンに標準として付属しているJNI (Java Native Interface) フレームワークによく似ています。
言語使用の比較
CNIの著者はJNIに対して様々な利点があると主張している。[14]
私たちが CNI を使用するのは、Java は標準的なコンパイル技術を使用して実装できる単なる別のプログラミング言語であるという考えに基づく Java 実装の場合に特に、それがより優れたソリューションであると考えているからです。これと、Gcc を使用して実装された言語は、意味のあるところでは互換性があるべきであるという考えを考慮すると、Java 呼び出し規約は、他の言語、特に C++ で使用されるものと可能な限り類似しているべきであることがわかります。これは、Java を C++ のサブセットとして考えることができるためです。CNI は、C++ と Java には *同じ* 呼び出し規約とオブジェクト レイアウトがあり、バイナリ互換性があるという考えに基づいて構築されたヘルパー関数と規約のセットにすぎません。(これは単純化していますが、十分に近いものです。)
CNIはJavaクラスがC++クラスとして現れることに依存している。例えば[15] ではJavaクラスが与えられ、
パブリッククラスInt { public int i ; public Int ( int i ) { this.i = i ; }パブリック静的Int zero = new Int ( 0 ) ; }
このクラスは次のように使用できます。
#include <gcj/cni.h> #include <Int>
Int * mult ( Int * p , int k ) { if ( k == 0 ) return Int :: zero ; // 静的メンバーアクセス。return new Int ( p -> i * k ); }
参照
- Excelsior JET (Excelsior Java ネイティブ コード コンパイラ)
- アイスティー
- カフェ
- セーブルVM
- ジャムVM
- アパッチハーモニー
- ジケス
- GraalVM - GraalVM のネイティブ イメージ機能は、クラス ファイルの実行可能バイナリを生成する事前コンパイル テクノロジです。
- Java仮想マシン
- 無料のJava実装
- Kotlin - Kotlin/Native は、Kotlin を JVM なしで実行されるネイティブ バイナリにコンパイルするテクノロジです。Kotlinコンパイラ用のLLVMベースのバックエンドと、Kotlin ランタイム ライブラリのネイティブ実装で構成されます。
参考文献
- ^ Anthony Green、Cygnus Solutions。「GCJ の発表」。
- ^ 「GCC リリース - GNU プロジェクト」。
- ^ 「GCJ: Java 用 GNU コンパイラ - GNU プロジェクト - フリーソフトウェア財団 (FSF)」。2007 年 5 月 9 日時点のオリジナルよりアーカイブ。2010年 4 月 22 日閲覧。
- ^ キャンベル、ビル (2013)。Java の世界におけるコンパイラ構築入門。CRC プレス、テイラー & フランシス グループ。ISBN 978-1-4398-6088-5. 2014年2月6日閲覧。
- ^ 「GCJ を使用した Java のコンパイル | Linux Journal」。
- ^ 「Java用GNUコンパイラ」。
- ^ 「gcj が Eclipse コンパイラをフロントエンドとして使用する」 2007 年 1 月 8 日。2007 年 5 月 9 日時点のオリジナルよりアーカイブ。2007年 5 月 20 日閲覧。
- ^ GCJ FAQ(よくある質問)
- ^ GCC は Java を廃止し、Go または ADA に置き換える予定
- ^ Andrew Haley (2016年9月30日). 「[gcc] リビジョン 240661」.
- ^ Tromey, Tom (2016年10月2日). 「gcjの削除」. The Cliffs of Inanity . 2016年10月3日閲覧。
- ^ 「GCC 7 リリース シリーズ: 変更点、新機能、修正」 。2017年5 月 9 日閲覧。
- ^ 「GCJ: The GNU Static Java Compiler」(PDF)。2011 年 6 月 7 日のオリジナル(PDF)からアーカイブ。2009年 8 月 2 日に取得。
- ^ GCJ FAQ – GNU プロジェクト – フリーソフトウェア財団 (FSF)
- ^ この例は https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes から引用しました。2016 年 10 月 20 日にWayback Machineにアーカイブされました。
外部リンク
- 「公式ウェブサイト」。GCC。GNU。2007年3月30日。2007年5月9日時点のオリジナルよりアーカイブ。
- 「GCJマニュアル」。2016年8月22日時点のオリジナルよりアーカイブ。
- 「CNIについて」。GCJマニュアル。2016年7月28日時点のオリジナルよりアーカイブ。
- Wielaard, Mark (2005年4月6日). 「GCJ - 過去、現在、そして未来」. LWN. 2019年8月2日時点のオリジナルよりアーカイブ。
