Collection品詞:固有名詞GNUのコンパイラーコレクション。(4.2.2以降)概要Cだけでなく早い時期からC++にも対応していたが、次のようなプログラミング言語に対応している。ソフトウェアで、多くのUNIXで使用されている。様々なアーキテクチャーにも対応している。MicrosystemsのSolarisなどのように標準でCコンパイラーなどの開発環境が付いてこないオペレーティングシステムでは、コンパイラーを含めた開発環境をGNUシリーズで揃えてしまう人も珍しくない。最適化の性能も、clang/LLVMが登場するまではフリーソフトウェアの中では優秀な方だった。一般的なコンパイラーと同様、「フロントエンド」と「バックエンド」で構成され、更にバックエンドは「コードジェネレーター(コード生成部)」と「オプティマイザー(最適化部)」に分かれている。フロントエンドで、プログラミング言語の字句解析や構文解析を行なう。これが、対応言語ごとに用意されることになる。バックエンドは全言語共通で、環境(CPUやOSなど)に応じたバイナリを作ることになる。Language)と呼ばれる中間言語を使用する。独自機能GCCは、CやC++に限ってみても、言語の標準仕様に対して独自の新機能を多数搭載している。この機能が、後に標準仕様に取り込まれることもある。以下は、代表的な独自機能の例(順不同)。始まる関数名となっている。これらは、GCCの利便性の向上やC/C++の要求仕様を実装するためのもの、あるいはGCCへの依存性を高めGCCへの囲い込みを強めることを意図したものと考えることができる。これら関数は当然、次世代コンパイラーclang/LLVMでも実装されたため、clang/LLVMへの移行には支障がない。」に記載がある(以下、順不同)。x)xを2進数にしたとき最初に1となるビット位置を返す。x)xのパリティを返す。UNIXが現存するのも、GCCあってこそである。FreeBSDなどのBSDや、Linuxなどは、古くからGCCに依存して成長してきた。様々な環境用のバイナリが出力できるため、クロス開発で使われることも多い。StallmanがGCC開発に着手したのは1985(昭和60)年である。当初はPastelと呼ばれるPascalの拡張言語で書かれ、これが後にCで書き直された。GNUのコンパイラーとして始めて公開されたのは1987(昭和62)年である。CommitteeにGCCのメンテナンスが引き継がれた。これ以降、この委員会が開発していた拡張版GCCのEGCSがGCCと呼ばれるようになっている。Committeeの指導の下で、様々なプログラマーグループによって維持されている。そんなGCCも、大規模化しCで記述されたもののメンテナンスも大変になったらしく、遂にC++で書き換えるcxx-conversionブランチができ、2012(平成24)年に無事にC++への書き換えに成功したという。正式バージョンもC++化されたものとなるのだろう。GCC離れGPLGCCはGPLでライセンスされているが、これが唯一にして最大の問題点である。商用開発で触れるには危険なライセンスだからである。4.2.2以降は、GPLv3にライセンスが変更されたため、更に問題は悪化した。GPLv3以降、特に企業を中心に、GPL系フリーソフトウェアへの協力者が大幅に減ることになる。GCC排除BSDではGPL排除に熱心な活動が続けられており、GPL汚染を避けるための防疫処置も行なわれている。Compiler(PCC)の改良版に関心を寄せている。4.2.1を長く使用している。アプライアンス用途への採用も多いFreeBSDはGPLv3ツールの同梱に難色を示しており、デフォルトコンパイラーをGCCからBSDライセンスとほぼ同じclang/LLVMへ置き換える作業を進めた。LLVMでは、GCC4から作られたフロントエンドllvm-gccも使うことができたが、あまり人気はなく、今ではサポートされていない。長くGCCの敵はなかった。GCCは必要十分かつ強力なコンパイラーだったためである。そんなGCC開発者はC/C++に飽きたらしく、Javaがオワコンというのは世界の共通認識と一致するものの、次の力の入れ先がなぜか「Go」だった。AppleはObjective-Cを愛用しているが、GCCはこれに力を余り注がず、その上あろう事かGPLv3にライセンスを変更したためAppleは激怒、遂に本気を出して新しいC/C++コンパイラーを作り出してしまった。clang/LLVM本気のAppleが実用化させた、GCCにとっての最強の敵はclang/LLVMだった。これはGPLではなく、BSDライセンス相当のソフトウェアである。本気になったAppleからの資金や技術者の投入は生半可ではなく、登場から10年以上の歴史を持つGCCを僅か数年で凌駕し、あっという間に性能で追い抜いてしまった。Appleは「GCCはオワコン」と述べており、Appleの統合開発環境(IDE)であるXcodeも、4以降はllvmがデフォルトになり、gccはllvm-gccのシンボリックリンクに置き換わり、後のバージョンではgccは綺麗に削除された。GCCは、ある日突然出てきたコンパイラーに、あっけなく負けたのである。劣勢なGCCGCCは、毎年3月から5月頃に新バージョンを公開している。4.9が公開され、C++14のドラフト(n3797)に対応した。3.4でC++14のドラフト(n3797)完全対応を達成している。clang/LLVMの開発力はGCCを上回っており、GCCを過去の遺物だとするAppleの言い分は決して驕りや荒唐無稽な主張でないことが分かる。10.0からはGCCを削除してclang/LLVMに移行、脱GPLを達成した。3.8からclang/LLVMに移行した。OpenBSDも近い将来にclang/LLVMに移行する計画である。NetBSDはまだ定かではないが、clang/LLVMでのビルドは可能なようになっている。版の特徴ここ近年は、ほぼ1年おき、3月から5月頃に新しいバージョンを公開している。5メジャーバージョンアップ。5系最初の版は5.1である。この頃にはclang/LLVMとの性能差は歴然となっている。拡張対応VISIUMcore対応このバージョンから、デフォルトのCバージョンが-std=gnu89(C89ベース)から-std=gnu11(C11ベース)に変更された。4.92014(平成26)年4月22日にリリースされたバージョン。1.2.1対応clang/LLVMより遅れたが、C++14に対応した。4.82013(平成25)年3月22日にリリースされたバージョン。4.8.2)などを特徴とする。4.72012(平成24)年3月22日にリリースされたバージョン。委譲コンストラクターエイリアス宣言ユーザー定義直定数このバージョンから、ナショナルセミコンダクターのCR16や、TIのC6Xなどのプロセッサーへの対応が開始された。4.62011(平成23)年3月25日にリリースされたバージョン。2.0の新機能に対応した。Objective-CランタイムAPIこのほか、Go言語への対応や、__float128データ型への対応なども行なわれている。4.5生成コードのパフォーマンス改善に焦点を当てて開発されたとしているバージョン。MPCライブラリが必要となった。4.4graphiteブランチで開発されてきた最適化機構が正式に取り込まれた。for文やwhile文の繰り返し箇所で、ループ順を入れ替えるなどで高速化する。Geodeプロセッサーへの対応を強化したバージョン。このバージョンからSSE4(SSE4.1、SSE4.2)に対応した。4.2OpenMP(gomp)への対応を最大の特徴とするバージョン。マルチコア化が進む昨今のプロセッサーへの対応として、pthreadと共に普及する機能とみられる。4.2.2以降はGPLv3となり、企業での採用が嫌忌された結果、FreeBSDほかでも不採用となった。95の対応強化を最大の特徴とするバージョンであるらしい。4.0メジャーバージョンアップとなり、バージョン4となった。このバージョンから、最適化フレームワークTREE-SSAが導入された。2バージョンのみ記載2.952.95.32.95.22.95.12.95現在GNUのファイルサーバーから入手できる最古のGCCが2.95である。