Cela me dérange depuis un moment. Comment GCC et g ++ se compilent-ils?
Je suppose que chaque révision est compilée avec une révision précédemment construite. Est-ce vrai? Et si c'est le cas, cela signifie-t-il que les versions les plus anciennes de g ++ et GCC ont été écrites en assembly?
c++
c
compiler-construction
user1010005
la source
la source
Réponses:
La version la plus ancienne de GCC a été compilée en utilisant un autre compilateur C, car il y en avait d'autres lors de son écriture. Le tout premier compilateur C (vers 1973, IIRC) a été implémenté soit dans l' assemblage PDP-11 , soit dans le langage de programmation B qui l'a précédé, mais dans tous les cas, le compilateur B a été écrit en assemblage.
De même, le tout premier compilateur C ++ (CPre / Cfront , 1979-1983) a probablement été implémenté pour la première fois en C, puis réécrit en C ++.Lorsque vous compilez GCC ou tout autre compilateur auto-hébergé, l'ordre complet de construction est:
Ce processus est appelé bootstrap . Il teste la capacité du compilateur à se compiler et s'assure que le compilateur résultant est construit avec toutes les optimisations qu'il implémente lui-même.
EDIT : Drew Dormann, dans les commentaires, souligne le compte rendu de Bjarne Stroustrup de la première implémentation de C ++ . Il a été implémenté en C ++ mais traduit par ce que Stroustrup appelle un "préprocesseur" de C ++ vers C; pas un compilateur complet par sa définition, mais C ++ était quand même amorcé en C.
la source
__DATE__
et__TIME__
qui varient même entre les invocations du même compilateur) que GCC compilé avec [GCC compilé avec [autre]] - sinon, c'est un bogue, et la construction bootstrap en 3 étapes est conçue pour saisir cela.