GNU コンパイラコレクション

GNU コンパイラコレクション
原作者リチャード・ストールマン
開発者GNUプロジェクト
初回リリース1987年3月22日[ 1 ] (1987年3月22日
安定版リリース
15.2 [ 2 ] ウィキデータで編集する / 2025年8月8日 (2025年8月8日
リポジトリ
書かれたCC++ [ 3 ]
オペレーティング·システムクロスプラットフォーム
プラットフォームGNUとその他多数
サイズ約1500万LOC [ 4 ]
入手可能な英語
タイプコンパイラ
ライセンスGCCランタイムライブラリ例外付きGPLv3+ [ 5 ]
Webサイトgcc .gnu .org

GNUコンパイラコレクションGCC)(旧称GNU Cコンパイラ)は、GNUプロジェクトコンパイラのコレクションであり、さまざまなプログラミング言語ハードウェアアーキテクチャオペレーティングシステムをサポートしています。フリーソフトウェア財団(FSF)は、GNU一般公衆利用許諾書(GNU GPL)に基づいてGCCをフリーソフトウェアとして配布しています。GCCは、 GNUおよびLinuxカーネルに関連するほとんどのプロジェクトで使用されるGNUツールチェーンの重要なコンポーネントです。2019年の時点で約1500万行のコードを持つGCCは、現存する最大規模のフリープログラムの1つです。[ 4 ]ツールとしても例としても、 フリーソフトウェアの成長に重要な役割を果たしてきました。

GCC 1.0は1987年にリチャード・ストールマンによって初めてリリースされた際、 C言語のみを扱えることからGNU Cコンパイラと名付けられました。[ 1 ]同年12月にはC++もコンパイルできるように拡張されました。その後、 Objective-CObjective-C++FortranAdaGoDModula-2RustCOBOLなどに対応したフロントエンド開発されました。 [ 6 ] OpenMPおよびOpenACC仕様もCおよびC++コンパイラでサポートされています。[ 7 ] [ 8 ]

GCCはGNUオペレーティングシステムの公式コンパイラであるだけでなく、ほとんどのLinuxディストリビューションを含む多くの他の現代的なUnix系コンピュータオペレーティングシステムで標準コンパイラとして採用されています。BSDファミリーオペレーティングシステムのほとんどもリリース後すぐにGCCに切り替えましたが、その後、FreeBSDApple macOSは主にライセンス上の理由からClangコンパイラに移行しました[ 9 ] 。 [ 10 ] [ 11 ] [ 12 ] GCCはWindowsAndroidiOSSolarisHP-UXAIX、およびMS-DOS互換オペレーティングシステム用のコードもコンパイルできます。[ 13 ]

GCCは、他のどのコンパイラよりも多くのプラットフォームと命令セットアーキテクチャに移植されており、フリーソフトウェアとプロプライエタリソフトウェアの両方の開発ツールとして広く採用されています。GCCは、 ARMベースやPower ISAベースのチップを含む多くの組み込みシステムでも利用可能です。

歴史

1983年後半、GNUオペレーティングシステムを立ち上げる努力の一環として、リチャードストールマンはアムステルダムコンパイラキットフリーユニバーシティコンパイラキットとしても知られる)の作者アンドリュー・S・タネンバウムに、そのソフトウェアをGNUで使用する許可を求めた。タネンバウムから、そのコンパイラはフリーではなく、フリーなのは大学だけだとアドバイスされると、ストールマンは別のコンパイラに取り組むことを決めた。[ 14 ]当初の計画は、レン・タワーらの助けを借りて、ローレンス・リバモア国立研究所の既存のコンパイラをパステルからCに書き直すことだった。[ 15 ] [ 16 ]ストールマンはリバモアコンパイラ用に新しいCフロントエンドを書いたが、それには数メガバイトのスタック空間が必要であることがわかり、64KBしかない68000 Unixシステムでは不可能であったため、新しいコンパイラを一から書く必要があると結論した。[ 15 ] PastelコンパイラのコードはGCCには採用されなかったが、ストールマンは自身が書いたCフロントエンドを使用した。[ 15 ] [ 17 ]

GCC は 1987 年 3 月 22 日に初めてリリースされ、MITからFTPで入手可能となった。[ 18 ]ストールマンは作者として記載されていたが、その他にも貢献があったとされており、その中には「パーサー、 RTL ジェネレーター、 RTL 定義、および Vax マシン記述の一部」を担当したタワー、中間言​​語としてRTL を使用するというアイデアを考案したジャック・デイビッドソンとクリストファー・W・フレイザー、プリプロセッサの大部分を書いたポール・ルービンなどが含まれている。 [ 19 ]ピーター・H・サルスによって「最初のフリーソフトウェアのヒット」と評されたGNU コンパイラーは、サン・マイクロシステムズが開発ツールをオペレーティングシステムから切り離し、以前のバンドル価格よりも高い価格で個別に販売していたちょうどその時期に登場したため、サンのユーザーの多くがベンダーのツールではなく GCC を購入またはダウンロードすることになった。[ 20 ]ストールマンはGNU Emacsを主なプロジェクトと考えていたが、1990年までにGCCは13のコンピュータアーキテクチャをサポートし、いくつかのベンダーのコンパイラよりも優れた性能を発揮し、いくつかの企業で商業的に使用されるようになった。[ 21 ]

EGCSフォーク

GCCはGPLでライセンスされていたため、他の方向で作業したいプログラマー、特にC以外の言語のインターフェースを書いているプログラマーは、ソースコードの配布要件を含むGPLの条件を満たす限り、コンパイラーの独自のフォークを自由に開発することができた。しかし、複数のフォークは非効率的で扱いにくく、公式GCCプロジェクトに作品を受け入れられるのが難しいことが、多くの人にとって非常にフラストレーションの溜まる問題だった。というのも、このプロジェクトは新機能よりも安定性を重視していたからである。[ 22 ] FSFは、GCC 2.xの公式バージョン(1992年以降開発)に追加される内容を非常に厳しく管理していたため、エリック・S・レイモンドのエッセイ「伽藍とバザール」ではGCCが「伽藍」開発モデルの一例として取り上げられた。

1997年、開発者グループがExperimental/Enhanced GNU Compiler System (EGCS)を結成し、複数の実験的なフォークを単一のプロジェクトに統合しました。[ 22 ] [ 17 ]この統合の基盤となったのは、GCCの開発スナップショット(2.7.2前後、後に2.8.1リリースまで)でした。統合対象には、g77(Fortran)、PGCC(P5 Pentiumに最適化されたGCC)[ 17 ] 、多くのC++の改良、そして多くの新しいアーキテクチャとオペレーティングシステムの派生が含まれていました。[ 23 ]

両プロジェクトは互いの変更を綿密に追っていたが、EGCSの開発の方がはるかに活発であったため、FSFはGCC 2.xコンパイラの開発を正式に中止し、EGCSをGCCの正式版として承認し、1999年4月にEGCSプロジェクトをGCCのメンテナーに任命した。1999年7月のGCC 2.95のリリースにより、2つのプロジェクトは再び統合された。[ 24 ] [ 17 ]それ以来、GCCは運営委員会の指導の下、世界中の多様なプログラマーのグループによってメンテナンスされてきた。[ 25 ]

GCC 3(2002)では、メンテナンス不足のためCHILLのフロントエンドが削除されました。 [ 26 ]

バージョン4.0より前のFortranフロントエンドは、 FORTRAN 77g77のみをサポートするものでしたが、後にFortran 95とFortran 2003およびFortran 2008の大部分をサポートする新しいGNU Fortranフロントエンドに置き換えられました。[ 27 ] [ 28 ]

バージョン4.8以降、GCCはC++で実装されています。[ 29 ]

Cilk PlusのサポートはGCC 5からGCC 7まで存在していました。[ 30 ] [ 31 ]

GCCは様々な命令セットアーキテクチャに移植されており、フリーソフトウェアとプロプライエタリソフトウェアの両方の開発ツールとして広く採用されています。GCCは、 Symbiangcceと呼ばれる)[ 32 ] 、 ARMベース、Power ISAベースのチップ[ 33 ]など、多くの組み込みシステムでも利用可能です。このコンパイラは、 PlayStation 2[ 34 ] 、 PlayStation 3のCell SPE、[ 35 ]Dreamcastなどのビデオゲーム機を含む、幅広いプラットフォームをターゲットにすることができます。[ 36 ] GCCは「60以上のプラットフォーム」に移植されています。[ 37 ]

サポートされている言語

15.1リリース時点で、GCCにはC ( gcc)、C++ ( g++)、Objective-CObjective-C++Fortran ( gfortran)、Ada ( GNAT )、Go ( gccgo)、D ( gdc、9.1以降)、[ 38 ] [ 39 ] Modula-2 ( gm2、13.1以降)、[ 40 ] [ 41 ] Rust ( gccrs、15.1以降)、COBOL ( gcobol、15.1以降)、およびALGOL 68 ( ga68、16.1以降)プログラミング言語のフロントエンドが含まれており、[ 42 ] OpenMPおよびOpenACC並列言語拡張機能はGCC 5.1以降でサポートされています。[ 8 ] [ 43 ] GCC 7より前のバージョンではJava ( )もサポートされており、Javaをネイティブマシンコードにコンパイルできます。[ 44 ]gcj

サードパーティ製のフロントエンドは、 Pascalgpc)、MercuryModula-3VHDLGHDL)、PL/Iなど多くの言語で存在します。[ 42 ] Unified Parallel C用のGCC UPCコンパイラなど、追加の言語をサポートするための実験的なブランチもいくつか存在します。[ 45 ] [ 46 ]

GCC 15.1以降、C++のデフォルトターゲットはC++ 20のスーパーセットであるgnu++20であり、GCC 15以降、CのデフォルトターゲットはC23のスーパーセットであるgnu23であり、厳密な標準サポートも利用可能です。GCCはC2YC++23C++26の実験的なサポートも提供しています。[ 47 ]

デザイン

プリプロセッサアセンブラリンカーなどの特殊なプログラムを含む、GCC の拡張コンパイル パイプラインの概要。
GCCは、多言語・マルチCPUコンパイラに典型的な3段階アーキテクチャを採用しています。すべてのプログラムツリーは「中間端」で共通の抽象表現に変換され、コード最適化バイナリコード生成機能をすべての言語で共有できるようになります。

GCCの外部インターフェースはUnixの慣例に従っています。ユーザーは言語固有のドライバプログラム(gccCの場合はC++、g++C++の場合はC++など)を呼び出します。このドライバプログラムはコマンド引数を解釈し、実際のコンパイラを呼び出し、出力に対してアセンブラを実行し、必要に応じてリンカーを実行して完全な実行可能バイナリを生成します。

各言語コンパイラは、ソースコードを読み取り、機械語を出力する独立したプログラムです。すべて共通の内部構造を持っています。言語ごとのフロントエンドは、その言語のソースコードを解析し、抽象構文木(略して「ツリー」)を生成します。

これらは必要に応じて、ミドルエンドの入力表現(GENERIC形式と呼ばれる)に変換され、ミドルエンドはプログラムを最終形式へと徐々に変換します。コンパイラ最適化静的コード解析技術(FORTIFY_SOURCE [ 48 ]など、バッファオーバーフローの検出を試みるコンパイラディレクティブ)がコードに適用されます。これらは複数の表現、主にアーキテクチャに依存しないGIMPLE表現とアーキテクチャに依存するRTL表現に対して機能します。最終的に、Jack DavidsonとChris Fraserのアルゴリズムに基づいた アーキテクチャ固有のパターンマッチングを使用して、マシンコードが生成されます。

GCCは、 Adaフロントエンドの一部を除き、主にC言語で記述されています。このディストリビューションには、AdaとC++の標準ライブラリが含まれており、そのコードの大部分はこれらの言語で記述されています。[ 49 ]一部のプラットフォームでは、このディストリビューションには低レベルのランタイムライブラリであるlibgccも含まれています。これは、機種に依存しないC言語とプロセッサ固有のマシンコードの組み合わせで記述されており、主に対象プロセッサが直接実行できない算術演算を処理するように設計されています。[ 50 ]

GCCはビルド時に多くの追加ツールを使用します。その多くは多くのUnixおよびLinuxディストリビューションでデフォルトでインストールされていますが(Windowsインストールでは通常インストールされません)、PerlFlexBison 、その他の一般的なツールが含まれます。さらに、現在ビルドにはGMPMPCMPFRという3つの追加ライブラリが必要です。[ 51 ]

2010年5月、GCC運営委員会は、GCCのコンパイルにC++コンパイラの使用を許可することを決定しました。 [ 52 ]このコンパイラは、主にC言語で記述され、C++の機能の一部が追加される予定でした。特に、GCCの開発者がC++のデストラクタジェネリクス機能を利用できるようにするために、この決定が下されました。[ 53 ]

2012年8月、GCC運営委員会はGCCの実装言語としてC++を使用することを発表しました。[ 54 ]これは、GCCをソースからビルドするために、 ISO/IEC C++03標準を理解するC++コンパイラが必要であることを意味します。

2020年5月18日、GCCはISO/IEC C++03標準からISO/IEC C++11標準に移行しました(つまり、コンパイラ自体をコンパイル、ブートストラップする必要がありましたが、デフォルトではC++の新しいバージョンをコンパイルします)。[ 55 ]

フロントエンド

フロントエンドは、前処理字句解析構文解析(パース)、そして意味解析から構成されます。コンパイラフロントエンドの目的は、言語の文法と意味に基づいて候補プログラムを受け入れるか拒否するか、エラーを識別し、有効なプログラム表現を後段のコンパイラ段階に渡すことです。この例は、 C言語で書かれた単純なプログラムに対して実行される字句解析とパースの処理を示しています。

フロントエンドはパーサーを使用して、与えられたソースファイル抽象構文木を生成します。構文木の抽象化により、サポートされている様々な言語のソースファイルを同じバックエンドで処理できます。GCCは当初Bisonで生成されたLALRパーサーを使用していましたが、 2004年にはC++用に、2006年にはCとObjective-C用に、徐々に手書きの再帰下降パーサーに切り替えました。[56 ] 2021年現在、すべてのフロントエンド手書きの再帰下降パーサーを使用しています。

GCC 4.0 までは、プログラムのツリー表現は対象となるプロセッサから完全に独立していませんでした。ツリーの意味は言語フロントエンドごとに多少異なり、フロントエンドは独自のツリーコードを提供できました。これは、GCC 4.0 の登場で導入された 2 つの新しい形式の言語非依存ツリーである GENERIC と GIMPLE の導入により簡略化されました。GENERIC はより複雑で、GCC 3.x Java フロントエンドの中間表現に基づいています。GIMPLE は簡略化された GENERIC で、さまざまな構成要素が複数の GIMPLE 命令にまで縮小されています。C C++、およびJavaフロントエンドは、フロントエンドで直接 GENERIC を生成します。その他のフロントエンドは、解析後に異なる中間表現を取得し、それを GENERIC に変換します。

どちらの場合でも、いわゆる「gimplifier」は、このより複雑な形式を、多数の言語およびアーキテクチャに依存しないグローバル(関数スコープ)最適化の共通言語である、より単純なSSAベースの GIMPLE 形式に変換します。

GENERICとGIMPLE

GENERIC は、ソースコードを実行可能バイナリにコンパイルする際の「中間端」として使用される中間表現言語です。GIMPLE呼ばれるサブセットは、GCC のすべてのフロントエンドのターゲットとなっています。

GCCの中間段階では、コンパイルされた言語とターゲットアーキテクチャの両方から独立して、GENERIC [ 58 ]表現からレジスタ転送言語(RTL)へと拡張し、すべてのコード解析と最適化を実行します。GENERIC表現には、中間段階で最適化された 命令型プログラミング構造のサブセットのみが含まれています。

ソースコードをGIMPLEに変換する際、[ 59 ]複雑な式は一時変数を用いて3アドレスのコードに分割されます。この表現は、命令型プログラムの解析と最適化を簡素化するために、ローリー・J・ヘンドレン[ 61 ]がMcCATコンパイラ[ 60 ]で提案したSIMPLE表現に着想を得ています。

最適化

最適化はコンパイルのどの段階でも発生する可能性がありますが、最適化の大部分はフロントエンドの構文と意味の解析の後、バックエンドのコード生成の前に実行されます。そのため、コンパイラのこの部分は、多少矛盾しているものの、「ミドルエンド」と呼ばれることがよくあります。

GCCの最適化の具体的な内容は、開発の進展に伴いリリースごとに異なりますが、ループ最適化ジャンプスレッド化共通部分式の除去命令スケジューリングなどの標準的なアルゴリズムが含まれています。RTL最適化は、 GIMPLEツリーにおけるグローバルSSAベースの最適化の追加により重要性が低下しています。 [ 62 ] RTL最適化は適用範囲がはるかに限定されており、高レベルの情報も少ないためです。

このレベルで実行される最適化には、デッドコードの除去部分的な冗長性の除去グローバル値の番号付けスパース条件付き定数の伝播集合体のスカラー置換などが含まれます。自動ベクトル化自動並列化などの配列依存性に基づく最適化も実行されます。プロファイルに基づく最適化も可能です。[ 63 ]

C++ 標準ライブラリ (libstdc++)

GCCプロジェクトには、 libstdc++と呼ばれるC++標準ライブラリの実装が含まれており、[ 64 ] GPLv3ライセンスの下でライセンスされていますが、GCCでソースをビルドする際に非GPLアプリケーションをリンクする例外があります。[ 65 ] GCCバージョン3以降、C++ ABIはIntelがItanium C++ ABI用に公開したABIに基づいています。[ 66 ]

その他の機能

GCC の機能には次のようなものがあります:

リンク時の最適化
リンク時最適化は、オブジェクトファイルの境界を越えて最適化を行い、リンクされたバイナリを直接的に改善します。リンク時最適化は、オブジェクトファイルに含まれるGimple表現のシリアル化を含む中間ファイルに依存します。このファイルは、ソースコンパイル時にオブジェクトファイルと共に生成されます。ソースコンパイルごとに、個別のオブジェクトファイルとリンク時ヘルパーファイルが生成されます。オブジェクトファイルがリンクされると、コンパイラが再度実行され、ヘルパーファイルを使用して、個別にコンパイルされたオブジェクトファイル全体のコードを最適化します。
プラグイン
プラグインはGCCコンパイラを直接拡張します。[ 67 ]プラグインを使用すると、外部コードをプラグインとしてロードすることで、既存のコンパイラを特定のニーズに合わせてカスタマイズできます。例えば、プラグインはGimple表現を操作する中間パスを追加、置換、さらには削除することもできます。[ 68 ]既にいくつかのGCCプラグインが公開されており、特に以下のプラグインが挙げられます。
  • Pythonプラグインはlibpythonにリンクし、コンパイラ内から任意のPythonスクリプトを呼び出すことを可能にします。GCCプラグインをPythonで記述できるようにすることを目的としています。
  • MELTプラグインはGCCを拡張するための高水準Lisp風言語を提供します。[ 69 ]
プラグインのサポートは2007年に論争を巻き起こした問題だった。[ 70 ]
C++トランザクションメモリ
C++言語にはトランザクショナルメモリに関する積極的な提案があります。GCC 6以降では、 でコンパイルすることで有効化できます-fgnu-tm[ 7 ] [ 71 ]
Unicode識別子
C++言語では識別子に非ASCII Unicode文字のサポートが必須ですが、この機能はGCC 10以降でのみサポートされています。既存の文字列リテラルの処理と同様に、ソースファイルはUTF-8でエンコードされているものと想定されます。この機能はCではオプションですが、今回の変更以降、利用可能になりました。[ 72 ] [ 73 ]
C拡張
GNU CはCプログラミング言語を、ネストされた関数を含むいくつかの非標準機能で拡張します。[ 74 ]

アーキテクチャ

Windows上でHello Worldをコンパイルする GCC

主にサポートされている(そして最もよくテストされている)プロセッサフ​​ァミリは、64ビットと32ビットのARM、64ビットと32ビットのx86、64ビットx86、64ビットのPowerPCSPARCです。[ 75 ]

GCCバージョン11.1のターゲットプロセッサフ​​ァミリには以下が含まれる: [ 76 ]

標準リリースでサポートされているあまり知られていないターゲット プロセッサには、次のものがあります。

FSF バージョンとは別に管理されている GCC バージョンでは、追加のプロセッサがサポートされています。

GCJ Javaコンパイラはネイティブマシン言語アーキテクチャまたはJava仮想マシンJavaバイトコードのいずれかをターゲットにすることができます。[ 79 ] GCCを新しいプラットフォームに再ターゲットする場合、ブートストラップがよく使用されます。モトローラ68000、ザイログZ80、その他のプロセッサは、テキサス・インスツルメンツ、ヒューレット・パッカード、シャープ、カシオの様々なプログラマブルグラフ電卓向けに開発されたGCCバージョンでもターゲットにされています。[ 80 ]

ライセンス

GCCはGNU一般公衆利用許諾書バージョン3に基づいてライセンスされています。 [ 81 ] GCCランタイム例外により、 GCCヘッダーおよびランタイムライブラリを使用して、プロプライエタリプログラム(フリーソフトウェアに加えて)をコンパイルすることが許可されています。これはGCCソースコードのライセンス条項に影響を与えません。[ 82 ]

しかし、この例外には制限があります。例えば、コンパイルプロセスにおいてGCCとGPL非互換のソフトウェアを併用する場合、GCCが生成するすべてのオブジェクトコードはGPLライセンスのライブラリから派生しているため、 GPLに従うことが必須となります。[ 83 ]

参照

参考文献

  1. ^ a b「GCCリリース」。GNUプロジェクト。2023年6月4日時点のオリジナルよりアーカイブ。 2020年7月24日閲覧
  2. ^ Richard Biener (2025年8月8日). “GCC 15.2 リリース” . 2025年8月8日閲覧。
  3. ^ “GCC Coding Conventions - GNU Project” . gcc.gnu.org . 2023年5月28日時点のオリジナルよりアーカイブ2022年2月7日閲覧。
  4. ^ a b Víctor Rodríguez (2019年10月1日). 「Cutting Edge Toolchain (GCC/GLIBCの最新機能)」 . youtube.com . Linux Foundation. 2021年11月7日時点のオリジナルよりアーカイブ。 2021年1月19日閲覧
  5. ^ “GCC ランタイムライブラリ例外” . 2023年3月31日時点のオリジナルよりアーカイブ2020年7月24日閲覧。
  6. ^ 「GCCでサポートされているプログラミング言語」 GNUプロジェクト。2023年1月18日時点のオリジナルよりアーカイブ。 2014年6月23日閲覧
  7. ^ a b「GCC 6 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」gcc.gnu.org . 2016年9月22日時点のオリジナルよりアーカイブ2016年9月19日閲覧
  8. ^ a b「OpenACC - GCC Wiki」 . gcc.gnu.org . 2015年4月1日時点のオリジナルよりアーカイブ2016年9月19日閲覧。
  9. ^ “LLVMコンパイラインフラストラクチャプロジェクト” . llvm.org . 2023年1月18日時点のオリジナルよりアーカイブ。 2021年9月24日閲覧
  10. ^ “Apple's GPLv3 purge” . meta.ath0.com . 2012年2月5日. 2023年1月18日時点のオリジナルよりアーカイブ2021年1月12日閲覧。
  11. ^ Linnemann, Reid (2012年6月20日). “Why Clang” . 2023年1月18日時点のオリジナルよりアーカイブ2021年1月12日閲覧。
  12. ^ “2007年8月29日: FreeBSD Foundation Newsletter, August 29, 2007” . 2007年10月11日. 2007年10月11日時点のオリジナルよりアーカイブ。 2021年1月12日閲覧
  13. ^ 「GCCのインストール:バイナリ - GNUプロジェクト - フリーソフトウェア財団(FSF)」 gcc.gnu.org 2021年1月5日時点のオリジナルよりアーカイブ。 2021年1月12日閲覧
  14. ^フォン・ハーゲン、ウィリアム (2006). GCC の決定版ガイド。決定版ガイド (第 2 版)。アプレス。 p. XXVII。ISBN 978-1-4302-0219-6.オリジナルから2024年4月5日にアーカイブ。 2020年9月25日閲覧そこで彼はVUCKの作者に手紙を書き、GNUで使用できるかどうかを尋ねた。明らかにVUCKの開発者は協力的でなく、大学は無料だがコンパイラは無料ではないと返答した。
  15. ^ a b c Stallman, Richard (2011年9月20日). 「GNUプロジェクトについて」 . GNUプロジェクト. 2019年8月9日時点のオリジナルよりアーカイブ。 2011年10月9日閲覧
  16. ^ Puzo, Jerome E. 編 (1986年2月). 「Gnu's Zoo」 . GNU Bulletin . 1 (1). フリーソフトウェア財団. 2015年6月23日時点のオリジナルよりアーカイブ。 2007年8月11日閲覧
  17. ^ a b c dフォン・ハーゲン、ウィリアム (2006). GCC の決定版ガイド。決定版ガイド (第 2 版)。アプレス。 p. XXVII。ISBN 978-1-4302-0219-6. 2024年4月5日時点のオリジナルよりアーカイブ。2020年9月25日閲覧。
  18. ^ Richard M. Stallman (Leonard H. Tower Jr. 転送) (1987年3月22日). 「GNU C コンパイラ ベータテストリリース」 .ニュースグループcomp.lang.c. 2013年6月2日時点のオリジナルよりアーカイブ2011年10月9日閲覧
  19. ^ Stallman, Richard M. (2001年6月22日) [初版1988年]、「GNU CCへの貢献者」GNUコンパイラコレクション(GCC)の使用と移植、Free Software Foundation, Inc.、7ページ、2023年1月18日時点のオリジナルよりアーカイブ。 2015年6月18日閲覧
  20. ^ Salus, Peter H. (2005). 「第10章 SUNとgcc」 . The Daemon, the Gnu and the Penguin . Groklaw . 2022年6月20日時点のオリジナルよりアーカイブ。 2015年9月14日閲覧
  21. ^ Garfinkel, Simson L. (1990年8月6日). 「GNUソフトウェアに備えよう」 . Computerworld . p. 102.
  22. ^ a b Henkel-Wallace, David (1997年8月15日)、「既存のGCCフォークをマージするための新しいコンパイラプロジェクト」2023年1月18日時点のオリジナルからアーカイブ。 2012年5月25日閲覧
  23. ^ 「GCC開発の小史」 www.softpanorama.org . 2022年11月9日時点のオリジナルよりアーカイブ2021年1月24日閲覧。
  24. ^ “History - GCC Wiki” . gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2020年9月28日閲覧。
  25. ^ “GCC 運営委員会 - GNU プロジェクト” . gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2016年7月25日閲覧。
  26. ^ 「PATCH] Chill を削除」 gcc.gnu.org . 2016年10月20日時点のオリジナルよりアーカイブ。 2010年7月29日閲覧
  27. ^ 「GNU FortranでサポートされているFortran 2003機能一覧」GNU . 2023年1月18日時点のオリジナルよりアーカイブ2009年6月25日閲覧
  28. ^ 「GNU FortranでサポートされているFortran 2008機能一覧」GNU . 2023年1月18日時点のオリジナルよりアーカイブ2009年6月25日閲覧
  29. ^ 「GCC 4.8 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」gcc.gnu.org2015年12月8日時点のオリジナルよりアーカイブ2015年2月17日閲覧
  30. ^ 「GCC 5 リリースシリーズ — 変更点、新機能、修正」gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2022年1月13日閲覧
  31. ^ 「GCC 8 リリースシリーズ — 変更点、新機能、修正点」gcc.gnu.org . 2018年11月29日時点のオリジナルよりアーカイブ2022年1月13日閲覧
  32. ^ 「Symbian GCC Improvement Project」2014年8月1日時点のオリジナルよりアーカイブ2007年11月8日閲覧。
  33. ^ 「Linux Board Support Packages」 . 2011年6月7日時点のオリジナルよりアーカイブ2021年1月24日閲覧。
  34. ^ 「gccをクロスコンパイラとして設定する」ps2stuff . 2002年6月8日. 2008年12月11日時点のオリジナルよりアーカイブ2008年12月12日閲覧。
  35. ^ “CompileFarm - GCC Wiki” . gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2016年9月19日閲覧。
  36. ^ "sh4 g++ guide" . 2002年12月20日時点のオリジナルよりアーカイブ2008年12月12日閲覧。
  37. ^ "Linux Information Project" . LINFO. 2023年1月3日時点のオリジナルよりアーカイブ2010年4月27日閲覧。GCCは60以上のプラットフォームに移植(つまり、動作するように変更)されており、これは他のどのコンパイラよりも多くなっています。
  38. ^ 「GCC 9 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」2022年2月19日時点のオリジナルよりアーカイブ2019年5月7日閲覧。
  39. ^ 「D言語フロントエンドがついにGCC 9に統合 - Phoronix」 . phoronix.com . 2022年5月17日時点のオリジナルよりアーカイブ。 2021年1月19日閲覧
  40. ^ “GCC 13 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト” . 2023年5月26日時点のオリジナルよりアーカイブ。 2023年6月23日閲覧
  41. ^ Proven, Liam (2022年12月16日). 「GCC 13がModula-2をサポート:PascalのフォローアップはFOSS形式で存続」 . 2022年12月19日時点のオリジナルよりアーカイブ。 2022年12月19日閲覧
  42. ^ a b「GCCフロントエンド」 . gnu.org. 2023年1月18日時点のオリジナルよりアーカイブ2011年11月25日閲覧。
  43. ^ 「GCC 5 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2015年4月23日閲覧
  44. ^ “GCC 7 Release Series” . gnu.org. 2020年9月2日時点のオリジナルよりアーカイブ2018年3月20日閲覧。
  45. ^ 「GCC UPC (GCC Unified Parallel C)」 Intrepid Technology, Inc. 2006年2月20日。2010年2月11日時点のオリジナルよりアーカイブ2009年3月11日閲覧。
  46. ^ Spengler, Brad (2021年1月12日). “Open Source Security, Inc. がRust向けGCCフロントエンドへの資金提供を発表” . 2021年4月25日時点のオリジナルよりアーカイブ。
  47. ^ “GCCにおけるC++標準サポート” . 2022年4月20日時点のオリジナルよりアーカイブ2021年5月17日閲覧。
  48. ^ 「セキュリティ機能:コンパイル時のバッファチェック(FORTIFY_SOURCE)」。fedoraproject.org。2007年1月7日時点のオリジナルよりアーカイブ2009年3月11日閲覧。
  49. ^ 「GCCの作成に使用された言語」 。 2008年5月27日時点のオリジナルよりアーカイブ2008年9月14日閲覧。
  50. ^ “GCC Internals” . GCC.org. 2023年1月18日時点のオリジナルよりアーカイブ2010年3月1日閲覧。
  51. ^ “GCCの前提条件 - GNUプロジェクト” . gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2021年9月5日閲覧。
  52. ^ 「GCC は C++ をある程度許容する」 The H . 2010年6月1日. 2022年9月26日時点のオリジナルよりアーカイブ2010年6月9日閲覧。
  53. ^ “Re: より多くのユーザーを引き付けるための取り組み?” . lists.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2021年9月24日閲覧。
  54. ^ 「GCC 4.8 リリースシリーズ: 変更点、新機能、修正点」2015年12月8日時点のオリジナルよりアーカイブ2013年10月4日閲覧。
  55. ^ “bootstrap: C++11への更新要件” . GitHub . 2022年9月29日時点のオリジナルよりアーカイブ2020年5月18日閲覧。
  56. ^ 「GCC 3.4 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2016年7月25日閲覧
  57. ^ 「GCC 4.1 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2016年7月25日閲覧
  58. ^ “GENERIC (GNU Compiler Collection (GCC) Internals)” . gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2016年7月25日閲覧。
  59. ^ “GIMPLE (GNU Compiler Collection (GCC) Internals)” . gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ2016年7月25日閲覧。
  60. ^ “McCAT” . 2004年8月12日時点のオリジナルよりアーカイブ2017年9月14日閲覧。{{cite web}}: CS1 maint: bot: 元のURLステータス不明(リンク
  61. ^ “Laurie Hendren's Home Page” . www.sable.mcgill.ca . 2022年9月27日時点のオリジナルよりアーカイブ2009年7月20日閲覧。
  62. ^ Novillo, Diego (2004年12月). 「From Source to Binary: The Inner Workings of GCC」 . Red Hat Magazine . 2009年4月1日時点のオリジナルよりアーカイブ。
  63. ^ 「GCCのインストール:ビルド - GNUプロジェクト」gcc.gnu.org2023年8月22日時点のオリジナルよりアーカイブ2016年7月25日閲覧
  64. ^ 「GNU C++ライブラリ」 . GNUプロジェクト. 2022年12月25日時点のオリジナルよりアーカイブ2021年2月21日閲覧。
  65. ^ “ライセンス” . GNUプロジェクト. 2023年1月18日時点のオリジナルよりアーカイブ。 2021年2月21日閲覧
  66. ^ 「ABIポリシーとガイドライン」gcc.gnu.org . 2025年11月11日閲覧
  67. ^ 「プラグイン」 . GCCオンラインドキュメント. 2013年4月30日時点のオリジナルよりアーカイブ。 2013年7月8日閲覧
  68. ^ Starynkevitch, Basile. 「GCC プラグインを MELT の例を通して」(PDF)2014年4月13日時点のオリジナルよりアーカイブ(PDF) 。 2014年4月10日閲覧
  69. ^ 「GCC MELTについて」2013年7月4日時点のオリジナルよりアーカイブ2013年7月8日閲覧。
  70. ^ Corbet, Jonathan (2007年11月19日). “GCC unplugged [LWN.net]” . lwn.net . 2020年11月9日時点のオリジナルよりアーカイブ2021年3月28日閲覧。
  71. ^ "TransactionalMemory - GCC Wiki" . gcc.gnu.org . 2016年8月19日時点のオリジナルよりアーカイブ。 2016年9月19日閲覧
  72. ^ “Lewis Hyatt - [PATCH] wwwdocs: GCCに追加された拡張識別子のドキュメントサポート” . gcc.gnu.org . 2020年3月27日時点のオリジナルよりアーカイブ。 2020年3月27日閲覧
  73. ^ 「CおよびC++の拡張識別子文字に関する推奨事項」 www.open-std.org . 2020年9月30日時点のオリジナルよりアーカイブ。 2020年3月27日閲覧
  74. ^ 「C拡張機能(GNUコンパイラコレクション(GCC)の使用)」 gcc.gnu.org . 2022年1月12日時点のオリジナルよりアーカイブ。 2022年1月12日閲覧
  75. ^ “GCC 12 Release Criteria” . gcc.gnu.org . 2022年10月26日. 2023年1月27日時点のオリジナルよりアーカイブ。 2023年1月27日閲覧
  76. ^ 「オプションの概要(GNUコンパイラコレクション(GCC)の使用)」gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ。 2020年8月21日閲覧
  77. ^ 「Hexagon Project Wiki」 。 2012年3月23日時点のオリジナルよりアーカイブ2011年5月19日閲覧。
  78. ^ “Google Code Archive - Google Code プロジェクトホスティング用の長期ストレージ” . code.google.com . 2022年9月25日時点のオリジナルよりアーカイブ2021年9月24日閲覧。
  79. ^ 「Javaプログラミング言語用GNUコンパイラ」 。 2007年5月9日時点のオリジナルよりアーカイブ2010年4月22日閲覧。
  80. ^グラフ電卓#プログラミング
  81. ^ 「GNUコンパイラコレクションの使用」 gnu.org . 2023年11月16日時点のオリジナルよりアーカイブ2019年11月5日閲覧。
  82. ^ 「GCCランタイム例外」。FSF。2014年4月16日時点のオリジナルよりアーカイブ2014年4月10日閲覧。
  83. ^ 「GCCランタイムライブラリ例外の根拠とFAQ - GNUプロジェクト - フリーソフトウェア財団」 . www.gnu.org .フリーソフトウェア財団. セクション「例外の仕組み」. 2025年7月25日時点のオリジナルからのアーカイブ。 2025年7月31日閲覧例外の仕組み (...) ランタイムライブラリと独立モジュールを組み合わせて作成されたターゲットコードの著作物は、たとえGPLv3の条項に違反する場合でも、すべてのターゲットコードが適格なコンパイルプロセスによって生成されたものである限り、伝播することが許可されます。その後、独立モジュールのライセンスと一致する任意の条件で、そのような組み合わせを伝達することができます。 (...) ただし、高レベルコードを低レベルコードに変換するプロセス中に、GCCをGPL非互換のソフトウェアと組み合わせて使用​​した場合、それは適格なコンパイルプロセスとはなりません。これは、例えば、GCCをプロプライエタリなプラグインと組み合わせて使用​​した場合に発生します。 (...) 適格コンパイルプロセスを使用している限り、GCC が生成するターゲットコードを「任意の条件で」配布する許可が与えられます。ただし、コンパイルプロセス中に GCC と連携して GPL 非互換のソフトウェアを使用した場合は、この許可を利用することはできません。GCC が生成するオブジェクトコードはすべてこれらの GPL 適用ライブラリから派生しているため、これらのオブジェクトコードを配布する際には GPL の条件に従う必要があります。GCC を使用して独自の GPL 非互換ソフトウェアを開発することはできません。

さらに読む

正式

他の