GNUコンパイラコレクション
[Wikipedia|▼Menu]

GNU Compiler Collection

開発元Free Software Foundation
初版1987年3月22日 (37年前) (1987-03-22)[1]

最新版13.2 / 2023年7月27日 (9か月前) (2023-07-27)
リポジトリ

gcc.gnu.org/git/gcc.git

対応OS多くのUnix系OSWindows(一部)
プラットフォームクロスプラットフォーム
サポート状況有
種別コンパイラ
ライセンスGPL
公式サイトgcc.gnu.org
テンプレートを表示

GNU Compiler Collection(グヌーコンパイラコレクション)は、GNUコンパイラ群である。略称は「GCC(ジーシーシー)」。GNUツールチェーンの中核となる構成要素(コンポーネント)にもなっている。
概説

最新標準パッケージには CC++Objective-CObjective-C++FortranAdaGoDのコンパイラ並びにこれらのライブラリが含まれている。[2] バージョン7以前では、Javaもサポートされていた。[3]

当初はCコンパイラとして開発し、GCCは GNU C Compiler を意味していた。しかし、もともと多言語を想定して設計しており、 GNU C Compiler と呼ばれていたときでも多くの言語に対応していた。現在でも GNU C Compiler の意味で「GCC」と呼ぶことも多い。ちなみに GNU C Compiler の実行ファイルの名称もgccである。なお、GNU C++コンパイラをG++、GNU JavaコンパイラをGCJ、GNU AdaコンパイラをGNATと呼ぶ。

CコンパイラとしてのGCCは、ANSI規格 (ANSI X3.159-1989) にほぼ適合するC言語コンパイラ処理系であった。登場当初の時点では、オペレーティングシステム (OS) 標準に付属するCコンパイラがANSI規格に適合していない部分が多いものがあった。そのため、GCCはANSI規格を広める役割を果たした。GCC自身はK&Rの範囲内のC言語で記述していたので、OS付属のコンパイラでコンパイルできた。ただし、GNU拡張という独自の仕様もあり、GCCでコンパイルできるものがANSI適合コンパイラでコンパイルできるとは限らない。
歴史

1985年、当時マサチューセッツ工科大学 (MIT) の研究者であったリチャード・ストールマンによって、既成のコンパイラを拡張する形で開発が始められた。当初コンパイラはPastel(英語版)というPascalの方言によって書かれていた。その後ストールマンとLeonard H. Tower, Jr.によってC言語で書き直され、GNUプロジェクトの一つとして1987年に公開された。さらに2012年にはLawrence CrowlとDiego NovilloによってC++で書き直された。
EGCS

EGCS (エッグズ[4]、Experimental/Enhanced GNU Compiler System) は、1997年に当時開発中のGCC 2.8をベースとしてCygnus社のEGCS Steering Committee(後のGCC Steering Committee)により開発された拡張版GCCである。1999年4月、GCCと再統合されてEGCSがGCCの公式バージョンとなり、GCCの開発主力はGCC Steering Committeeに委ねられた。また、この時点でGCCはGNU Compiler Collectionの意味となった[5]。統合後初めてリリースされたバージョンは、1999年7月のGCC 2.95である。

GCCの主なバージョン[6]日付バージョン内容
1999年7月31日2.951999年4月のGCC/EGCS再統合以来のGCCの最初のリリースであり、ほぼ1年分の新しい開発とバグ修正が含まれている。
2001年6月18日3.0
2002年5月15日3.1ほとんどのELFプラットフォームの既定のデバッグ形式がDWARF2に。
2002年8月14日3.2
2003年5月13日3.3
2004年4月18日3.4GCCの実装がK&RからC89に変更。新しいプロシージャ間最適化を実装。
2005年4月20日4.0.0tree ssaブランチをマージ。既存のRTL表現よりも高レベルの中間表現に基づく完全に新しい最適化フレームワークを採用。
2007年5月13日4.2.0OpenMP 2.5サポート
2008年3月5日4.3.0Intel Core 2とAMD Geodeプロセッサのサポートを強化
2009年4月21日4.4.0大量の新機能を含んだメジャーリリースバージョン。Graphiteブランチが統合され、新しいループ最適化のフレームワークを採用。
2010年4月14日4.5.0C++0xの実験的サポート (ラムダ式、型変換演算子、raw string)。新しいリンク時最適化(LTO)のフレームワークを採用。
2011年3月25日4.6.0Intel Sandy Bridgeプロセッサに対応 (AVX拡張命令セットも対応)
2012年3月22日4.7.0プロシージャ間最適化(IPO)の改善
2013年3月22日4.8.0GCCの実装がCからC++98に変更された。アドレスサニタイザ、スレッドサニタイザが追加。新しいローカルレジスタアロケータ(LRA)が実装。DWARF4が既定のデバッグ形式に。
2014年4月22日4.9.0C++14の機能追加、OpenMP 4.0対応。未定義動作サニタイザが追加。リンク時最適化の改善。
2015年4月22日5.1CのデフォルトがC11のGNU拡張に。未定義動作サニタイザの新しいオプション。ポインタ境界チェッカー。
2016年4月27日6.1C++14がデフォルトに。OpenMP 4.5をフルサポート。配列境界チェッカー。
2017年5月2日7.1C++17の実験的サポート。アドレスサニタイザの新しいオプション。
2018年5月2日8.1C17をサポート。エラーメッセージを改善。
2019年5月3日9.1
2020年5月7日10.1C++14とC++17の間のABIの非互換性が修正。
2021年4月27日11.1GCCの実装がC++11に変更された。C++17がデフォルトに。DWARF5が既定のデバッグ形式に。
2021年5月14日8.5
2021年6月1日9.4
2021年6月28日11.2
2022年4月21日11.3
2022年5月6日12.1シャドーコールスタックサニタイザがAArch64に追加。
2022年5月9日9.5
2022年6月28日10.4
2022年8月19日12.2
2023年4月26日13.1
2023年5月8日12.3AMD Zen 4プロセッサーのサポート。(-march=znver4)

構成

GCCは通常のコンパイラと同様にフロントエンド部、最適化部、バックエンド部から構成される。

フロントエンド部は字句解析構文解析などを行い、対応言語ごとに用意されている。たとえばC++フロントエンド、Javaフロントエンドなどがある。

バックエンド部のコード生成部(コードジェネレータ)、および最適化部(オプティマイザ)は全言語で共通である。したがってGCCの対応の言語同士の間では、生成コードの質や対応するCPUの種類は原理的に同じになる。なお、フロントエンドおよびバックエンドの間でやりとりされる中間形式としてレジスタ転送言語(英語版) (RTL) が使用される。

CコンパイラとしてのGCCの開発のために開発された構文解析部生成系bisonやフリーな字句解析部生成系flexといったプログラムを使用してGNU Cコンパイラその他の各種フロントエンドは構築されている。これらは単独のフリーソフトウェアとしても有用なものである。

GCCはバージョン4から中間形式が2つ追加された。まず、各言語は通常フロントエンド言語の木構造を保持した共通中間形式のGENERICに変換されその後GIMPLEという中間形式で木の最適化SSAをおこなってからRTLの最適化がおこなわれる。また、CやC++のコンパイル時にフロントエンドの構文解析、字句解析においてbisonやflexを使用しなくなった。
影響と評価.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この節には独自研究が含まれているおそれがあります。問題箇所を検証出典を追加して、記事の改善にご協力ください。議論はノートを参照してください。(2018年8月)

貢献

GCCはそれ自身が有用なフリーソフトウェアだが、OSやDOSエクステンダ(DJGPP、EMXなど)を構築するための基盤ツールとしても非常に有用であり、商用・非商用を問わず多くの環境で標準的なCコンパイラとして採用されている。特にLinuxFreeBSDなど、フリーソフトウェアとしてのOSは、もしGCCが存在しなかったならば大きく違ったものになっていたであろうと言われている。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:48 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef