GCC 10.2 が独自のソースコードをコンパイルしているスクリーンショット | |
| 原作者 | リチャード・ストールマン |
|---|---|
| 開発者 | GNU プロジェクト |
| 初回リリース | 1987年3月22日[1] |
| 安定版リリース | 14.2 [2]
/ 2024年8月1日 |
| リポジトリ |
|
| 書かれた | C、C++ [3] |
| オペレーティング·システム | クロスプラットフォーム |
| プラットフォーム | GNUおよびその他多数 |
| サイズ | 約1500万LOC [4] |
| 利用可能 | 英語 |
| タイプ | コンパイラ |
| ライセンス | GCCランタイムライブラリ例外付きGPLv3+ [5] |
| Webサイト | gcc.gnu.org |
GNUコンパイラコレクション(GCC)は、さまざまなプログラミング言語、ハードウェアアーキテクチャ、オペレーティングシステムをサポートするGNUプロジェクトのコンパイラのコレクションです。フリーソフトウェア財団(FSF)は、 GNU一般公衆利用許諾書(GNU GPL)の下でGCCをフリーソフトウェアとして配布しています。GCCは、GNUおよびLinuxカーネルに関連するほとんどのプロジェクトで使用されるGNUツールチェーンの重要なコンポーネントです。2019年の時点で約1500万行のコードを持つGCCは、現存する最大規模のフリープログラムの1つです。[4]ツールとしても例としても、 フリーソフトウェアの成長に重要な役割を果たしてきました。
1987年にリチャード・ストールマンによって最初にリリースされたとき、GCC 1.0はCプログラミング言語のみを扱えたため、GNU Cコンパイラと名付けられました。[1]同年12月にはC++をコンパイルできるように拡張されました。その後、Objective-C、Objective-C++、Fortran、Ada、D、Go、Rustなどのフロントエンドが開発されました。[ 6 ] [ 7 ] OpenMPおよびOpenACC仕様もCおよびC ++コンパイラでサポートされています。[8] [9]
GCC は、他のどのコンパイラよりも多くのプラットフォームおよび命令セット アーキテクチャに移植されており、フリー ソフトウェアとプロプライエタリ ソフトウェアの両方の開発ツールとして広く導入されています。GCC は、 ARMベースおよびPower ISAベースのチップを含む多くの組み込みシステムでも利用できます。
GCCはGNUオペレーティングシステムの公式コンパイラであるだけでなく、ほとんどのLinuxディストリビューションを含む他の多くの最新のUnix系コンピュータオペレーティングシステムで標準コンパイラとして採用されています。ほとんどのBSDファミリーオペレーティングシステムもリリース後すぐにGCCに切り替えましたが、その後、FreeBSDとApple macOSは主にライセンス上の理由からClangコンパイラに移行しました[10] 。 [11] [12] [13] GCCはWindows、Android、iOS、Solaris、HP-UX、AIX、DOSのコードもコンパイルできます。[14]
歴史
1983年後半、GNUオペレーティングシステムを立ち上げる取り組みの一環として、リチャード・ストールマンはアムステルダム・コンパイラ・キット(フリー大学コンパイラ・キットとしても知られる)の作者アンドリュー・S・タネンバウムに、そのソフトウェアをGNUで使用する許可を求めた。タネンバウムから、そのコンパイラはフリーではなく、フリーなのは大学だけだとアドバイスされると、ストールマンは別のコンパイラに取り組むことを決めた。[15]当初の計画は、レン・タワーらの助けを借りて、ローレンス・リバモア国立研究所の既存のコンパイラをPastelからCに書き直すことだった。 [16] [17]ストールマンはリバモア・コンパイラ用に新しいCフロントエンドを書いたが、それには数メガバイトのスタック空間が必要であることに気づき、 64KBしかない68000 Unixシステムでは不可能だったため、ゼロから新しいコンパイラを書く必要があると結論付けた。[16] PastelコンパイラのコードはGCCには採用されなかったが、ストールマンは自身が書いたCフロントエンドを使用した。[16] [18]
GCC は 1987 年 3 月 22 日に初めてリリースされ、MITからFTPで入手可能となった。[19]ストールマンは作者として記載されていたが、他の貢献者として「パーサー、RTL ジェネレーター、RTL 定義、および Vax マシン記述の一部」を担当したタワー、RTL を中間言語として使用するというアイデアを考案したジャック・デイビッドソンとクリストファー・W・フレイザー、プリプロセッサの大部分を書いたポール・ルービンが挙げられる。 [20]ピーター・H・サルスによって「最初のフリーソフトウェアのヒット」と評されたGNU コンパイラは、サン・マイクロシステムズが開発ツールをオペレーティング システムから切り離し、以前のバンドル価格よりも高い価格で個別に販売していた時期に登場したため、サンのユーザーの多くがベンダーのツールではなく GCC を購入またはダウンロードすることになった。[21]ストールマンはGNU Emacsを主なプロジェクトと考えていたが、1990年までにGCCは13のコンピュータアーキテクチャをサポートし、いくつかのベンダーのコンパイラよりも優れた性能を発揮し、いくつかの企業で商業的に使用されていた。[22]
EGCSフォーク
GCC は GPL の下でライセンスされていたため、他の方向で作業したいプログラマー、特に C 以外の言語のインターフェースを書いているプログラマーは、ソース コードを配布するという要件を含む GPL の条件を満たす限り、コンパイラーの独自のフォークを自由に開発することができました。しかし、複数のフォークは非効率的で扱いにくいことが判明し、プロジェクトが新機能よりも安定性を重視していたため、公式の GCC プロジェクトに作業を受け入れてもらうのが困難だったため、多くの人が非常にイライラしました。[23] FSF は、GCC 2.x の公式バージョン (1992 年以降開発) に追加される内容を非常に厳しく管理していたため、GCC はEric S. Raymondのエッセイ「The Cathedral and the Bazaar」で「大聖堂」開発モデルの一例として取り上げられました。
1997年、開発者のグループがExperimental/Enhanced GNU Compiler System (EGCS)を結成し、いくつかの実験的なフォークを1つのプロジェクトに統合しました。[23] [18]統合の基盤となったのは、GCCの開発スナップショット(2.7.2前後で、その後2.8.1リリースまで続いた)でした。統合にはg77(Fortran)、PGCC(P5 Pentiumに最適化されたGCC)、[18]多くのC++の改良、そして多くの新しいアーキテクチャとオペレーティングシステムの変種が含まれていました。[24]
両プロジェクトは互いの変更を綿密に追っていたが、EGCSの開発はより活発であったため、FSFは公式にGCC 2.xコンパイラの開発を中止し、EGCSをGCCの公式バージョンとして承認し、1999年4月にEGCSプロジェクトをGCCのメンテナーに任命した。1999年7月のGCC 2.95のリリースにより、2つのプロジェクトは再び統合された。[25] [18]それ以来、GCCは運営委員会の指導の下、世界中のさまざまなプログラマーのグループによってメンテナンスされている。[26]
GCC 3(2002)では、メンテナンス不足のためCHILLのフロントエンドが削除されました。 [27]
バージョン4.0より前のFortranフロントエンドは、 FORTRAN 77g77のみをサポートするものでしたが、後に、 Fortran 95とFortran 2003およびFortran 2008の大部分もサポートする新しいGNU Fortranフロントエンドに置き換えられました。[28] [29]
バージョン4.8以降、GCCはC++で実装されています。[30]
Cilk PlusのサポートはGCC 5からGCC 7まで存在していました。[31] [32]
GCCはさまざまな命令セットアーキテクチャに移植されており、フリーソフトウェアとプロプライエタリソフトウェアの両方の開発ツールとして広く採用されています。GCCは、Symbian(gcceと呼ばれる) [33]、ARMベース、Power ISAベースのチップ[34]など、多くの組み込みシステムでも利用できます。このコンパイラは、 PlayStation 2、[35] 、 PlayStation 3のCell SPE、[36]、Dreamcastなどのビデオゲームコンソールを含むさまざまなプラットフォームをターゲットにできます。[37]他のどのコンパイラよりも多くの種類のプロセッサとオペレーティングシステムに移植されています。 [38] [自費出版ソース? ] [より良いソースが必要]
サポートされている言語
13.1リリース時点で、[アップデート]GCCにはC ( gcc)、C++ ( g++)、Objective-CおよびObjective-C++、Fortran ( gfortran)、Ada ( GNAT )、Go ( gccgo)、D ( gdc、9.1以降)、[39] [40]およびModula-2 ( gm2、13.1以降) [41] [42]プログラミング言語のフロントエンドが含まれており、[43] OpenMPおよびOpenACC並列言語拡張はGCC 5.1以降でサポートされています。[9] [44] GCC 7より前のバージョンではJava ( gcj)もサポートされており、Javaをネイティブマシンコードにコンパイルできます。[45]
C++とCの言語バージョンのサポートに関しては、GCC 11.1以降、デフォルトのターゲットはC++17のスーパーセットであるgnu++17とC11のスーパーセットであるgnu11であり、厳密な標準サポートも利用できます。GCCはC++20とC++23の実験的なサポートも提供しています。[46]
サードパーティのフロントエンドは、 Pascal(gpc)、Modula-3、VHDL(GHDL)など多くの言語で存在します。 [43] Unified Parallel C [47]やRust用のGCC UPCコンパイラなど、追加の言語をサポートするための実験的なブランチもいくつか存在します。[48] [49] [50] [より良いソースが必要]
デザイン


GCC の外部インターフェースはUnix の規則に従います。ユーザーは言語固有のドライバー プログラム ( gccC の場合は 、g++C++ の場合は など) を呼び出します。このプログラムはコマンド引数を解釈し、実際のコンパイラを呼び出し、出力に対してアセンブラーを実行し、オプションでリンカーを実行して完全な実行可能バイナリを生成します。
各言語コンパイラは、ソース コードを読み取ってマシン コードを出力する個別のプログラムです。すべて共通の内部構造を持っています。言語ごとのフロント エンドは、その言語のソース コードを解析し、抽象構文ツリー(略して「ツリー」) を生成します。
これらは、必要に応じて、GENERIC形式と呼ばれるミドルエンドの入力表現に変換され、ミドルエンドはプログラムを最終形式に向けて徐々に変換します。コンパイラの最適化と静的コード分析技術(FORTIFY_SOURCEなど、[51]バッファオーバーフローの検出を試みるコンパイラディレクティブ)がコードに適用されます。これらは、主にアーキテクチャに依存しないGIMPLE表現とアーキテクチャに依存するRTL表現の複数の表現で機能します。最後に、Jack DavidsonとChris Fraserのアルゴリズムに基づいた アーキテクチャ固有のパターンマッチングを使用してマシンコードが生成されます。
GCCは、 Adaフロントエンドの一部を除いて、主にCで書かれています。ディストリビューションには、AdaとC++の標準ライブラリが含まれており、そのコードのほとんどはこれらの言語で書かれています。[52] [更新が必要]一部のプラットフォームでは、ディストリビューションには、マシンに依存しないCとプロセッサ固有のマシンコードの組み合わせで書かれた低レベルのランタイムライブラリlibgccも含まれており、主にターゲットプロセッサが直接実行できない算術演算を処理するように設計されています。[53]
GCC はビルド時に多くの追加ツールを使用しますが、その多くは多くの Unix および Linux ディストリビューションでデフォルトでインストールされています (ただし、通常、Windows インストールには存在しません)。これには、 Perl、[詳細な説明が必要] Flex、Bison、およびその他の一般的なツールが含まれます。さらに、ビルドするには、現在、GMP、 MPC 、およびMPFR の3 つの追加ライブラリが必要です。[54]
2010年5月、GCC運営委員会はGCCのコンパイルにC++コンパイラの使用を許可することを決定した。 [55]コンパイラは主にCで書かれ、C++の機能のサブセットが追加される予定だった。特に、これはGCCの開発者がC++のデストラクタとジェネリック機能を利用できるようにするために決定された。[56]
2012年8月、GCC運営委員会は、GCCの実装言語としてC++を使用することを発表しました。[57]これは、ソースからGCCをビルドするには、 ISO/IEC C++03標準を理解するC++コンパイラが必要であることを意味します。
2020年5月18日、GCCはISO/IEC C++03標準からISO/IEC C++11標準に移行しました(つまり、コンパイラ自体をコンパイル、ブートストラップする必要がありましたが、デフォルトではC++の新しいバージョンをコンパイルします)。[58]
フロントエンド

各フロントエンドはパーサーを使用して、特定のソースファイルの抽象構文木を生成します。構文木の抽象化により、サポートされているさまざまな言語のソースファイルを同じバックエンドで処理できます。GCCはBisonで生成されたLALRパーサーを使用して開始しましたが、 2004年にC++用に手書きの再帰下降パーサーに徐々に切り替えられました[59] 、 2006年にはCとObjective-C用に手書きの再帰下降パーサーに切り替えられました[60]。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 [61]表現から始めてレジスタ転送言語(RTL)に拡張し、すべてのコード分析と最適化を実行します。GENERIC表現には、中間段階で最適化された命令型プログラミング構造のサブセットのみが含まれています。
ソースコードをGIMPLEに変換する際、[62]複雑な式は一時変数を使用して3アドレスのコードに分割されます。この表現は、命令型プログラムの分析と最適化を簡素化するためにLaurie J. Hendren [64]がMcCATコンパイラ[63]で提案したSIMPLE表現に触発されました。
最適化
最適化はコンパイルのどの段階でも実行できますが、最適化の大部分はフロントエンドの構文と意味の分析の後、バックエンドのコード生成の前に実行されます。そのため、コンパイラのこの部分は、多少矛盾はあるものの、「ミドルエンド」と呼ばれるのが一般的です。
GCCの最適化の正確なセットは、開発の過程でリリースごとに異なりますが、ループ最適化、ジャンプスレッド、共通部分式の削除、命令スケジューリングなどの標準的なアルゴリズムが含まれています。RTL最適化は、 GIMPLEツリーに対するグローバルSSAベースの最適化の追加により重要性が低下しました[65]。これは、RTL最適化の範囲がはるかに限定されており、高レベルの情報が少ないためです。
このレベルで実行される最適化には、デッドコードの除去、部分的な冗長性の除去、グローバル値の番号付け、スパース条件付き定数の伝播、集合体のスカラー置換などがある。自動ベクトル化や自動並列化などの配列依存性に基づく最適化も実行される。プロファイルに基づく最適化も可能である。[66]
C++ 標準ライブラリ (libstdc++)
GCCプロジェクトには、 libstdc++と呼ばれるC++標準ライブラリの実装が含まれており、 [67] GPLv3ライセンスの下でライセンスされていますが、ソースがGCCでビルドされた場合に非GPLアプリケーションをリンクする例外があります。[68]
その他の機能
GCC の機能には次のようなものがあります。
- リンク時の最適化
- リンク時の最適化は、オブジェクト ファイルの境界を越えて最適化し、リンクされたバイナリを直接改善します。リンク時の最適化は、オブジェクト ファイルに含まれるGimple表現のシリアル化を含む中間ファイルに依存します。 [引用が必要]このファイルは、ソースのコンパイル時にオブジェクト ファイルと一緒に生成されます。ソースのコンパイルごとに、個別のオブジェクト ファイルとリンク時のヘルパー ファイルが生成されます。オブジェクト ファイルがリンクされると、コンパイラが再度実行され、ヘルパー ファイルを使用して、個別にコンパイルされたオブジェクト ファイル全体のコードを最適化します。
- プラグイン
- プラグインはGCCコンパイラを直接拡張します。[69]プラグインを使用すると、外部コードをプラグインとしてロードすることで、標準コンパイラを特定のニーズに合わせて調整できます。たとえば、プラグインはGimple表現を操作する中間パスを追加、置換、または削除することができます。 [70]すでにいくつかのGCCプラグインが公開されています。
- Python プラグインは libpython にリンクし、コンパイラ内から任意の Python スクリプトを呼び出すことができます。目的は、GCC プラグインを Python で記述できるようにすることです。
- MELTプラグインはGCCを拡張するための高水準Lisp風言語を提供します。[71]
- プラグインのサポートは2007年に論争を呼んだ問題であった。[72]
- C++トランザクション メモリ
- C++言語にはトランザクションメモリの積極的な提案があります。これはGCC 6以降でコンパイルすると有効になります
-fgnu-tm。[8] [73] - Unicode識別子
- C++言語では識別子に非ASCII Unicode文字のサポートが求められているが、この機能はGCC 10以降でのみサポートされている。既存の文字列リテラルの処理と同様に、ソースファイルはUTF-8でエンコードされているものと想定されている。この機能はCではオプションだが、この変更以降は利用可能になっている。[74] [75]
- C拡張
- GNU Cは、ネストされた関数[76]や式[77]など、いくつかの非標準機能を追加してCプログラミング言語を拡張します
typeof。
アーキテクチャ

主にサポートされている(そして最もよくテストされている)プロセッサファミリは、64ビットと32ビットのARM、64ビットと32ビットのx86_64とx86、64ビットのPowerPCとSPARCです。[78]
GCCバージョン11.1のターゲットプロセッサファミリには以下が含まれる: [79]
標準リリースでサポートされているあまり知られていないターゲット プロセッサには、次のものがあります。
FSF バージョンとは別に管理されている GCC バージョンでは、追加のプロセッサがサポートされています。
GCJ Javaコンパイラは、ネイティブマシン言語アーキテクチャまたはJava仮想マシンのJavaバイトコードのいずれかをターゲットにすることができます。[82] GCCを新しいプラットフォームに再ターゲットする場合、ブートストラップがよく使用されます。 Motorola 68000、Zilog Z80、およびその他のプロセッサも、Texas Instruments、Hewlett Packard、Sharp、Casioのさまざまなプログラム可能なグラフ電卓用に開発されたGCCバージョンでターゲットにされています。[83]
ライセンス
GCCはGNU General Public Licenseバージョン3に基づいてライセンスされています。[84] GCCランタイム例外は、 GCCヘッダーとランタイムライブラリを使用して、(フリーソフトウェアに加えて)プロプライエタリプログラムをコンパイルすることを許可しています。これは、GCCソースコードのライセンス条件に影響を与えません。[85]
参照
参考文献
- ^ ab “GCC Releases”. GNU プロジェクト. 2023年6月4日時点のオリジナルよりアーカイブ。2020年7月24日閲覧。
- ^ ヤクブ・イェリネク (2024 年 8 月 1 日)。 「GCC 14.2 リリース」。2024 年8 月 1 日に取得。
- ^ “GCC Coding Conventions - GNU Project”. gcc.gnu.org . 2023年5月28日時点のオリジナルよりアーカイブ。 2022年2月7日閲覧。
- ^ ab Víctor Rodríguez (2019年10月1日). 「Cutting Edge Toolchain (GCC/GLIBCの最新機能)」. youtube.com . Linux Foundation. 2021年11月7日時点のオリジナルよりアーカイブ。 2021年1月19日閲覧。
- ^ “GCC ランタイム ライブラリ例外”. 2023年3月31日時点のオリジナルよりアーカイブ。2020年7月24日閲覧。
- ^ GCC Rust、Rust GCC、2023年6月4日、2023年1月6日時点のオリジナルよりアーカイブ。 2023年6月4日閲覧。
- ^ 「GCC でサポートされているプログラミング言語」。GNU プロジェクト。2023 年 1 月 18 日時点のオリジナルよりアーカイブ。2014 年6 月 23 日閲覧。
- ^ ab 「GCC 6 リリース シリーズ — 変更点、新機能、修正 - GNU プロジェクト」。gcc.gnu.org。2016年 9 月 22 日時点のオリジナルよりアーカイブ。2016年9 月 19 日閲覧。
- ^ ab "OpenACC - GCC Wiki". gcc.gnu.org . 2015年4月1日時点のオリジナルよりアーカイブ。2016年9月19日閲覧。
- ^ “LLVM コンパイラ インフラストラクチャ プロジェクト”. llvm.org . 2023年1月18日時点のオリジナルよりアーカイブ。2021年9月24日閲覧。
- ^ “Apple's GPLv3 purge”. meta.ath0.com . 2012年2月5日. 2023年1月18日時点のオリジナルよりアーカイブ。2021年1月12日閲覧。
- ^ Linnemann, Reid (2012年6月20日). “Why Clang”. 2023年1月18日時点のオリジナルよりアーカイブ。 2021年1月12日閲覧。
- ^ “2007年8月29日: FreeBSD Foundation Newsletter, 2007年8月29日”. 2007年10月11日. 2007年10月11日時点のオリジナルよりアーカイブ。 2021年1月12日閲覧。
- ^ “GCCのインストール: バイナリ - GNUプロジェクト - フリーソフトウェア財団(FSF)”. gcc.gnu.org . 2021年1月5日時点のオリジナルよりアーカイブ。2021年1月12日閲覧。
- ^ フォン・ハーゲン、ウィリアム (2006). GCC の決定版ガイド。決定版ガイド (第 2 版)。アプレス。 p. XXVII。ISBN 978-1-4302-0219-6. 2024年4月5日時点のオリジナルよりアーカイブ。 2020年9月25日閲覧。
そこで彼は、VUCKの作者に手紙を書き、GNUで使用できるかどうかを尋ねた。 明らかに、VUCKの開発者は非協力的で、大学は無料だがコンパイラはそうではないと返答した。
- ^ abc Stallman, Richard (2011年9月20日). 「GNUプロジェクトについて」. GNUプロジェクト. 2019年8月9日時点のオリジナルよりアーカイブ。 2011年10月9日閲覧。
- ^ Puzo, Jerome E. 編 (1986 年 2 月)。「Gnu's Zoo」。GNU速報。1 ( 1 )。フリーソフトウェア財団。2015 年 6 月 23 日時点のオリジナルよりアーカイブ。2007 年8 月 11 日閲覧。
- ^ abcd フォン・ハーゲン、ウィリアム (2006)。 GCC の決定版ガイド。決定版ガイド (第 2 版)。アプレス。 p. XXVII。ISBN 978-1-4302-0219-6. 2024年4月5日時点のオリジナルよりアーカイブ。2020年9月25日閲覧。
- ^ Richard M. Stallman (Leonard H. Tower Jr. によって転送) (1987 年 3 月 22 日)。「GNU C コンパイラ ベータ テスト リリース」。ニュースグループ: comp.lang.c。2013 年 6 月 2 日時点のオリジナルよりアーカイブ。2011 年10 月 9 日閲覧。
- ^ Stallman, Richard M. (2001年6月22日) [初版1988年]、「GNU CCへの貢献者」、GNUコンパイラコレクション(GCC)の使用と移植、Free Software Foundation, Inc.、7ページ、2023年1月18日時点のオリジナルよりアーカイブ。 2015年6月18日閲覧。
- ^ Salus, Peter H. (2005 ) . 「第10章 SUNとgcc」。デーモン、GNU、ペンギン。Groklaw 。2022年6月20日時点のオリジナルよりアーカイブ。 2015年9月14日閲覧。
- ^ Garfinkel, Simson L. (1990 年 8 月 6 日)。「GNU ソフトウェアに備えよう」。Computerworld 、 p. 102。
- ^ ab Henkel-Wallace, David (1997年8月15日)、「既存のGCCフォークをマージする新しいコンパイラプロジェクト」、2023年1月18日時点のオリジナルよりアーカイブ。 2012年5月25日閲覧。
- ^ 「GCC開発の短い歴史」。www.softpanorama.org。2022年11月9日時点のオリジナルよりアーカイブ。2021年1月24日閲覧。
- ^ “History - GCC Wiki”. gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ。2020年9月28日閲覧。
- ^ 「GCC 運営委員会 - GNU プロジェクト」。gcc.gnu.org。2023年1月18日時点のオリジナルよりアーカイブ。2016年7月25日閲覧。
- ^ 「PATCH] Chill を削除」。gcc.gnu.org 。 2016年10月20日時点のオリジナルよりアーカイブ。2010年7月29日閲覧。
- ^ 「GNU Fortran でサポートされている Fortran 2003 機能の表」。GNU 。 2023年1月18日時点のオリジナルよりアーカイブ。2009年6月25日閲覧。
- ^ 「GNU Fortran でサポートされている Fortran 2008 機能の表」。GNU 。 2023年1月18日時点のオリジナルよりアーカイブ。2009年6月25日閲覧。
- ^ 「GCC 4.8 リリース シリーズ — 変更点、新機能、修正 - GNU プロジェクト」。gcc.gnu.org。2015年 12 月 8 日時点のオリジナルよりアーカイブ。2015年2 月 17 日閲覧。
- ^ 「GCC 5 リリースシリーズ — 変更点、新機能、修正」。gcc.gnu.org 。 2023年1月18日時点のオリジナルよりアーカイブ。 2022年1月13日閲覧。
- ^ 「GCC 8 リリースシリーズ — 変更点、新機能、修正」。gcc.gnu.org 。 2018年11月29日時点のオリジナルよりアーカイブ。2022年1月13日閲覧。
- ^ 「Symbian GCC Improvement Project」。2014年8月1日時点のオリジナルよりアーカイブ。2007年11月8日閲覧。
- ^ “Linux Board Support Packages”. 2011年6月7日時点のオリジナルよりアーカイブ。2021年1月24日閲覧。
- ^ 「gcc をクロスコンパイラとして設定する」。ps2stuff。2002年 6 月 8 日。2008 年 12 月 11 日時点のオリジナルよりアーカイブ。2008年12 月 12 日閲覧。
- ^ “CompileFarm - GCC Wiki”. gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ。2016年9月19日閲覧。
- ^ 「sh4 g++ ガイド」。2002 年 12 月 20 日時点のオリジナルよりアーカイブ。2008 年12 月 12 日閲覧。
- ^ “Linux Information Project”. LINFO. 2023年1月3日時点のオリジナルよりアーカイブ。2010年4月27日閲覧。
GCCは60以上のプラットフォームに移植(つまり、実行できるように変更)されており、これは他のどのコンパイラよりも多くなっています。
- ^ 「GCC 9 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」。2022年2月19日時点のオリジナルよりアーカイブ。2019年5月7日閲覧。
- ^ 「D言語フロントエンドがついにGCC 9に統合されました - Phoronix」。phoronix.com 。 2022年5月17日時点のオリジナルよりアーカイブ。 2021年1月19日閲覧。
- ^ “GCC 13 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト”. 2023年5月26日時点のオリジナルよりアーカイブ。2023年6月23日閲覧。
- ^ Proven, Liam (2022年12月16日). 「GCC 13がModula-2をサポート:PascalのフォローアップはFOSS形式で存続」。2022年12月19日時点のオリジナルよりアーカイブ。 2022年12月19日閲覧。
- ^ ab "GCC Front Ends". gnu.org. 2023年1月18日時点のオリジナルよりアーカイブ。2011年11月25日閲覧。
- ^ 「GCC 5 リリースシリーズ — 変更点、新機能、修正 - GNU プロジェクト」。gcc.gnu.org 。 2023年1月18日時点のオリジナルよりアーカイブ。 2015年4月23日閲覧。
- ^ “GCC 7 Release Series”. gnu.org. 2020年9月2日時点のオリジナルよりアーカイブ。2018年3月20日閲覧。
- ^ “GCC での C++ 標準サポート”. 2022 年 4 月 20 日時点のオリジナルよりアーカイブ。2021 年5 月 17 日閲覧。
- ^ 「GCC UPC (GCC Unified Parallel C)」。Intrepid Technology, Inc. 2006年2月20日。2010年2月11日時点のオリジナルよりアーカイブ。2009年3月11日閲覧。
- ^ “GCC Front-End For Rust”. 2023年1月10日時点のオリジナルよりアーカイブ。2023年1月6日閲覧。
- ^ “GCC Front-End for Rust (Github)”. GitHub . 2023年1月5日. 2023年1月6日時点のオリジナルよりアーカイブ。 2023年1月6日閲覧。
- ^ Spengler, Brad (2021年1月12日). 「Open Source Security, Inc. が Rust 向け GCC フロントエンドへの資金提供を発表」。2021年4月25日時点のオリジナルよりアーカイブ。
- ^ 「セキュリティ機能: コンパイル時のバッファ チェック (FORTIFY_SOURCE)」。fedoraproject.org。2007 年 1 月 7 日時点のオリジナルよりアーカイブ。2009年3 月 11 日閲覧。
- ^ 「GCC の作成に使用される言語」。2008 年 5 月 27 日時点のオリジナルよりアーカイブ。2008年9 月 14 日閲覧。
- ^ “GCC Internals”. GCC.org. 2023年1月18日時点のオリジナルよりアーカイブ。 2010年3月1日閲覧。
- ^ “GCC の前提条件 - GNU プロジェクト”. gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ。2021年9月5日閲覧。
- ^ 「GCC は C++ をある程度許可します」。The H。2010 年 6 月 1 日。2022 年 9 月 26 日時点のオリジナルよりアーカイブ。2010 年6 月 9 日閲覧。
- ^ “Re: より多くのユーザーを引き付けるための取り組み?”. lists.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ。2021年9月24日閲覧。
- ^ 「GCC 4.8 リリース シリーズ: 変更点、新機能、修正」。2015 年 12 月 8 日時点のオリジナルよりアーカイブ。2013 年10 月 4 日閲覧。
- ^ “bootstrap: C++11への更新要件”. GitHub . 2022年9月29日時点のオリジナルよりアーカイブ。2020年5月18日閲覧。
- ^ 「GCC 3.4 リリース シリーズ — 変更点、新機能、修正 - GNU プロジェクト」。gcc.gnu.org。2023年1 月 18 日時点のオリジナルよりアーカイブ。2016年7 月 25 日閲覧。
- ^ 「GCC 4.1 リリース シリーズ — 変更点、新機能、修正 - GNU プロジェクト」。gcc.gnu.org。2023年1 月 18 日時点のオリジナルよりアーカイブ。2016年7 月 25 日閲覧。
- ^ “GENERIC (GNU Compiler Collection (GCC) Internals)”。gcc.gnu.org。2023年1月18日時点のオリジナルよりアーカイブ。 2016年7月25日閲覧。
- ^ “GIMPLE (GNU Compiler Collection (GCC) Internals)”. gcc.gnu.org . 2023年1月18日時点のオリジナルよりアーカイブ。 2016年7月25日閲覧。
- ^ “McCAT”. 2004年8月12日時点のオリジナルよりアーカイブ。2017年9月14日閲覧。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク) - ^ “Laurie Hendren's Home Page”. www.sable.mcgill.ca . 2022年9月27日時点のオリジナルよりアーカイブ。2009年7月20日閲覧。
- ^ Novillo, Diego (2004 年 12 月). 「From Source to Binary: The Inner Workings of GCC」. Red Hat Magazine . 2009 年 4 月 1 日時点のオリジナルよりアーカイブ。
- ^ “GCC のインストール: ビルド - GNU プロジェクト”. gcc.gnu.org . 2023 年 8 月 22 日時点のオリジナルよりアーカイブ。2016 年7 月 25 日閲覧。
- ^ “The GNU C++ Library”. GNU プロジェクト. 2022年12月25日時点のオリジナルよりアーカイブ。2021年2月21日閲覧。
- ^ “ライセンス”. GNUプロジェクト. 2023年1月18日時点のオリジナルよりアーカイブ。 2021年2月21日閲覧。
- ^ 「プラグイン」。GCCオンライン ドキュメント。2013 年 4 月 30 日時点のオリジナルよりアーカイブ。2013 年7 月 8 日閲覧。
- ^ Starynkevitch, Basile. 「GCC プラグイン thru the MELT example」(PDF)。2014 年 4 月 13 日時点のオリジナルよりアーカイブ(PDF) 。2014 年4 月 10 日閲覧。
- ^ 「GCC MELTについて」。2013年7月4日時点のオリジナルよりアーカイブ。2013年7月8日閲覧。
- ^ “GCC unplugged [LWN.net]”. lwn.net . 2020年11月9日時点のオリジナルよりアーカイブ。 2021年3月28日閲覧。
- ^ 「TransactionalMemory - GCC Wiki」。gcc.gnu.org。2016年8月19日時点のオリジナルよりアーカイブ。2016年9月19日閲覧。
- ^ “Lewis Hyatt - [PATCH] wwwdocs: GCC に追加された拡張識別子のドキュメントサポート”. gcc.gnu.org . 2020年3月27日時点のオリジナルよりアーカイブ。2020年3月27日閲覧。
- ^ 「CおよびC++の拡張識別子文字に関する推奨事項」www.open-std.org。 2020年9月30日時点のオリジナルよりアーカイブ。 2020年3月27日閲覧。
- ^ 「C拡張機能(GNUコンパイラコレクション(GCC)の使用)」gcc.gnu.org。2022年1月12日時点のオリジナルよりアーカイブ。 2022年1月12日閲覧。
- ^ “Typeof - GNU コンパイラ コレクション (GCC) の使用”. gcc.gnu.org . 2022 年 1 月 13 日時点のオリジナルよりアーカイブ。 2022 年1 月 12 日閲覧。
- ^ “GCC 12 Release Criteria”. gcc.gnu.org . 2022年10月26日. 2023年1月27日時点のオリジナルよりアーカイブ。2023年1月27日閲覧。
- ^ 「オプションの概要 (GNU コンパイラ コレクション (GCC) の使用)」。gcc.gnu.org。2023 年 1 月 18 日時点のオリジナルよりアーカイブ。2020 年8 月 21 日閲覧。
- ^ 「Hexagon Project Wiki」。2012年3月23日時点のオリジナルよりアーカイブ。2011年5月19日閲覧。
- ^ “Google Code Archive - Google Code プロジェクト ホスティング用の長期ストレージ”. code.google.com . 2022 年 9 月 25 日時点のオリジナルよりアーカイブ。2021 年9 月 24 日閲覧。
- ^ 「Javaプログラミング言語のGNUコンパイラ」。2007年5月9日時点のオリジナルよりアーカイブ。2010年4月22日閲覧。
- ^ グラフ電卓#プログラミング
- ^ 「GNU コンパイラ コレクションの使用」。gnu.org。2023 年 11 月 16 日時点のオリジナルよりアーカイブ。2019 年11 月 5 日閲覧。
- ^ 「GCC ランタイム例外」。FSF。2014 年 4 月 16 日時点のオリジナルよりアーカイブ。2014 年4 月 10 日閲覧。
さらに読む
- GNU コンパイラ コレクション (GCC) の使用、Free Software Foundation、2008 年。
- GNU コンパイラ コレクション (GCC) 内部、フリーソフトウェア財団、2008 年。
- GCC 入門、Network Theory Ltd.、2004 年 (2005 年 8 月改訂) 。ISBN 0-9541617-9-3。
- アーサー・グリフィス『GCC: The Complete Reference』McGraw Hill / Osborne、2002年。ISBN 0-07-222405-3。
外部リンク
正式
- 公式サイト
- GCC リリース タイムライン
- GCC開発計画
他の
- IIT ボンベイの GCC 4.0.2 アーキテクチャと内部ドキュメントのコレクション
- Kerner, Sean Michael (2006 年 3 月 2 日)。「最適化を重視した新しい GCC」。internetnews.com
- Kerner, Sean Michael (2005 年 4 月 22 日)。「Open Source GCC 4.0: Older, Faster」。internetnews.com。2006 年 9 月 17 日時点のオリジナルよりアーカイブ。2006年10 月 21 日閲覧。
- ソースからバイナリへ: GCC の内部動作、Diego Novillo 著、Red Hat Magazine、2004 年 12 月
- GENERICとGIMPLEに関する2003年の論文
- Cygnus Support のマーケティング、1990 年代の GCC 開発を扱ったエッセイ。巻末の「Cygnus エンジニアリングの内部」セクションには、30 の月次レポートが掲載されています。
- EGCS 1.0 の発表
- EGCS 1.0 の機能一覧
- フォークの恐怖、リック・モーエンによるエッセイ。GCC/EGCS フォークを含む 7 つの有名なフォークを記録している。
