web-dev-qa-db-fra.com

Le compilateur gcc C est-il écrit en C lui-même?

Le compilateur gcc C est-il écrit en C lui-même? Ou est-ce écrit en Assemblée? Si le compilateur est écrit en C, alors quel est le compilateur utilisé pour compiler le code du compilateur?

81
euphoria83

L'historique spécifique à gcc est donné sur le GCC Wiki . Le point le plus général est que les compilateurs sont généralement initialement compilés avec un autre compilateur jusqu'à ce qu'ils soient suffisamment puissants pour se compiler. Alternativement, il est possible d'écrire un compilateur de base qui peut gérer un sous-ensemble de vos fonctionnalités dans l'assembleur, et construire à partir de là. Mais encore une fois, cela n'est presque plus nécessaire. Il existe de nombreux compilateurs disponibles, dans une variété de langues. Même lorsque Stephen Johnson écrivait pcc (l'un des premiers compilateurs C), il y avait des compilateurs pour B disponibles, ainsi que de nombreux autres langages. gcc avait plusieurs compilateurs parmi lesquels choisir pour le construire à l'origine, et RMS dit qu'il utilisait le compilateur Pastel au moins pendant son développement initial.

N'oubliez pas, il n'est pas nécessaire qu'un compilateur C soit écrit en C. Vous pouvez l'écrire en Perl si vous le souhaitez. Il n'est pas nécessaire qu'un compilateur pour une plateforme donnée soit écrit à l'origine sur cette plateforme (les systèmes embarqués sont presque toujours compilés sur un autre système). Il existe donc de nombreuses façons de se faire démarrer.

Cette question a quelques subtilités intéressantes liées à la première instance d'amorçage du compilateur. Si vous étiez très intelligent, vous pourriez utiliser cela bootstrap pour faire quelque chose d'incroyable, brillant et terrifiant .

91
Rob Napier

À l'origine, il était écrit dans une langue de l'Assemblée, puis il a commencé à se nourrir lui-même.

51
Daniel A. White

Bien que ce ne soit évidemment qu'un indicateur très approximatif, j'ai trouvé cette liste rapide sur le gcc-5.1.0-src/gcc/ répertoire intéressant. Ce répertoire contient les principales sources de GCC lui-même (à l'exception des bibliothèques d'exécution).

Voici les premiers décomptes de fichiers (plus de 100) regroupés par extension dominé par les fichiers C et 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 

Veuillez noter que de nos jours GCC fait référence à la collection du compilateur GNU, pas seulement au compilateur C GNU C).

6.3 Le sous-répertoire gcc

Le répertoire gcc contient de nombreux fichiers qui font partie des sources C de GCC, d'autres fichiers utilisés dans le cadre du processus de configuration et de construction, et des sous-répertoires, y compris la documentation et une suite de tests.

Référence:https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html

3
oo_miguel