によるとman gcc
、gccは次の言語をサポートし、フラグを使用して選択できます-x
。
c c-header cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
java
gccに言語を置く基準は何ですか?明らかに、CやC ++のような言語はgccにありますが、goやjavaに驚きました。
また、gnu.orgのgccドキュメント説明する「GCCの言語に依存しないコンポーネントには、ほとんどのオプティマイザとさまざまなプロセッサの機械語コードを生成する「バックエンド」が含まれています。」コンパイラに関する私の知識はせいぜい基本的ですが、これはgccが言語を一般的な形式に解析し、レキシングした後、そこからいくつかのバイナリが生成されますか?この場合、言語に依存しないgccオプティマイザを作成すると、Cやgoなどの言語で機能しますか?
答え1
基本的には、言語のフロントエンドと必要なサポートライブラリがあり、適切にライセンスされており、十分な品質(コードはもちろんドキュメントやテストも含む)を持って、それを維持したい人がいるはずです。意思決定者はGCC運営委員会。
近いうちに言語が追加または削除される例があります。Dは2011年に候補になった。、2017年に承認GCC 8でも利用可能です。一方、Javaは長い沈黙の終わりにGCC 7から削除されました。
追加する項目がありますPythonそして錆ところで活動があまりないようです。
gccはコンポーネントに分かれています。;サポートするさまざまな言語は、プログラムを中間表現に変換するフロントエンドによって実装されています。ジップラー(言語と機械に依存しない)。したがって、オプティマイザは複数の言語で共有できます。