gcc CコンパイラはC自体で書かれていますか?それともアセンブリで書かれていますか?コンパイラがCで記述されている場合、コンパイラコードのコンパイルに使用されるコンパイラは何ですか?
gcc CコンパイラはC自体で書かれていますか?それともアセンブリで書かれていますか?コンパイラがCで記述されている場合、コンパイラコードのコンパイルに使用されるコンパイラは何ですか?
回答:
GCCに固有の履歴がで与えられているGCCのWiki。より一般的な点は、コンパイラーは通常、それ自体をコンパイルするのに十分強力になるまで、他のコンパイラーで最初にコンパイルされるということです。あるいは、アセンブラーで機能のサブセットを処理し、そこから構築できる基本的なコンパイラーを作成することもできます。しかし、繰り返しになりますが、これはもうほとんど必要ありません。さまざまな言語で利用できるコンパイラがたくさんあります。Stephen Johnsonがpcc(最初のCコンパイラーの1つ)を書いていたときでさえ、他の多くの言語とともに、B用のコンパイラーが利用可能でした。gccには、元々ビルドするために選択できるコンパイラがいくつかあり、RMSは、少なくとも最初の開発中はPastelコンパイラを使用していたと述べています。
CコンパイラをCで記述する必要はありません。必要に応じて、Perlで記述することもできます。特定のプラットフォームのコンパイラが元々そのプラットフォームで記述されている必要はありません(組み込みシステムはほとんどの場合、他のシステムでコンパイルされます)。したがって、自分をブートストラップする方法はたくさんあります。
この質問には、コンパイラのブートストラップの最初のインスタンスに関連するいくつかの興味深い微妙な点があります。あなたが非常に賢いなら、あなたはそのブートストラップを利用して、信じられないほど、華麗で恐ろしいことをすることができます。
もともとはいくつかのアセンブリ言語で書かれていましたが、その後ドッグフード自体が始まりました。
これは明らかに非常に大まかな指標ですが、ディレクトリのこのクイックリストはgcc-5.1.0-src/gcc/
興味深いものでした。このディレクトリには、GCC自体の主なソースが含まれています(ランタイムライブラリを除く)。
これは、CファイルとC ++ファイルが支配的な拡張子でグループ化された上位のファイル数(100を超える)です。
112 .opt
118 .def
140 .cc
185 .x
250 .exp
353 .md
366 .mm
414 .f
430 .f03
521 .m
625 .a
1082 .go
1371 .h
1602 .ads
1655 .adb
1828 .ada
3860 .f90
11231 .C // C++
23811 .c // C
最近でGCC
は、GNU Cコンパイラだけでなく、GNUコンパイラコレクションを指していることに注意してください。
6.3gccサブディレクトリ
gccディレクトリには、GCCのCソースの一部である多くのファイル、構成およびビルドプロセスの一部として使用される他のファイル、およびドキュメントやテストスイートを含むサブディレクトリが含まれています。
参照: https ://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html