web-dev-qa-db-fra.com

Comment sont amorcés GCC et g ++?

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 assembleur?

182
user1010005

La version la plus ancienne de GCC a été compilée à l'aide d'un autre compilateur C, car il y en avait d'autres au moment de son écriture. Le tout premier compilateur C jamais créé (vers 1973, IIRC) a été implémenté soit dans PDP-11 Assembly, soit dans le langage de programmation B qui l'a précédé, mais en tout cas le compilateur B a été écrit dans Assembly . De même, le tout premier compilateur C++ (CPre/ Cfront , 1979-1983) a probablement été d'abord implémenté en C, puis réécrit en C++.

Lorsque vous compilez GCC ou tout autre compilateur auto-hébergé, l'ordre complet de construction est le suivant:

  1. Construire une nouvelle version de GCC avec le compilateur C existant
  2. recréez la nouvelle version de GCC avec celle que vous venez de construire
  3. (facultatif) répétez l'étape 2 à des fins de vérification.

Ce processus est appelé bootstrapping . 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.

[~ # ~] modifier [~ # ~] : Drew Dormann, dans les commentaires, pointe le compte rendu de Bjarne Stroustrup sur le première mise en œuvre de C++ . Il a été implémenté en C++ mais traduit par ce que Stroustrup appelle un "préprocesseur" de C++ en C; pas un compilateur complet par sa définition, mais quand même C++ a été bootstrapé en C.

174
Fred Foo