web-dev-qa-db-ja.com

gcc CコンパイラはC自体で書かれていますか?

Gcc CコンパイラはC自体で書かれていますか?それとも、アセンブリで書かれていますか?コンパイラがCで記述されている場合、コンパイラコードのコンパイルに使用されるコンパイラは何ですか?

81
euphoria83

Gccの具体的な履歴は GCC Wiki で提供されています。より一般的な点は、コンパイラーは一般に、コンパイルできるほど強力になるまで、他のコンパイラーでコンパイルされるのが一般的だということです。あるいは、アセンブラーで機能のサブセットを処理できる基本的なコンパイラーを作成し、そこからビルドすることもできます。しかし、これももうほとんど必要ありません。さまざまな言語のコンパイラがたくさんあります。 Stephen Johnsonがpcc(最初のCコンパイラの1つ)を書いていたときでさえ、他の多くの言語とともにBのコンパイラが利用可能でした。 gccには、最初にビルドするために選択するいくつかのコンパイラがあり、RMSは、少なくとも最初の開発時にはパステルコンパイラを使用していたと言います。

CコンパイラーをCで作成する必要はありません。必要に応じてPerlで作成できます。特定のプラットフォーム用のコンパイラをそのプラットフォームで最初に作成する必要はありません(ほとんどの場合、組み込みシステムは他のシステムでコンパイルされます)。そのため、自分自身をブートストラップする方法はたくさんあります。

この質問には、コンパイラのブートストラップの最初のインスタンスに関連する興味深い微妙な点がいくつかあります。あなたが非常に賢いなら、あなたはそれを利用してbootstrapを行うことができます 信じられないほど、素晴らしい、恐ろしい

91
Rob Napier

もともとそれはいくつかのアセンブリ言語で書かれていましたが、その後、食べ物自体をドッグし始めました。

51
Daniel A. White

これは明らかに非常に大まかな指標にすぎませんが、gcc-5.1.0-src/gcc/ディレクトリでこの listing を簡単に見つけました。このディレクトリには、GCC自体の主要なソースが含まれています(ランタイムライブラリを除く)。

トップファイル数(100を超える)を拡張子でグループ化したものがCおよびC++ファイルで占められています。

    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 Compiler Collection)を指していることに注意してください。

6.3 gccサブディレクトリ

Gccディレクトリには、GCCのCソースの一部である多くのファイル、構成およびビルドプロセスの一部として使用されるその他のファイル、ドキュメントやテストスイートなどのサブディレクトリが含まれています。

参照:https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html

3
oo_miguel