N'y a-t-il pas un problème de poulet et d'oeuf puisque GCC est écrit en C ++ lui-même?

10

Depuis la version 4.8, le compilateur C ++ GCC (la partie G ++ de celui-ci) n'est plus écrit en C, mais en C ++ lui-même. J'ai une question hypothétique à ce sujet.

Je me demande comment compiler le code C ++ de GCC sur une nouvelle plate-forme qui n'a pas encore de compilateur C ++. Bien sûr, vous pouvez utiliser des binaires précompilés compilés sur d'autres machines. Ou vous pouvez utiliser une ancienne version de GCC écrite en C et compiler la version actuelle avec.

Cependant, sans binaires prédéfinis et juste la dernière version, vous étiez coincé, non? Sinon, y a-t-il d'autres implications sur cette situation soulevées par le passage du C au C ++ du projet GCC?

danijar
la source
3
Je ne suis pas sûr de ce que vous demandez ici, bien que vous souhaitiez peut-être en savoir plus sur la compilation croisée .
5
La toute nouvelle plateforme n'aura ni compilateur C ++ ni compilateur C. La compilation croisée est la réponse.
doc
1
Vous devriez probablement lire le passage de GCC à C ++ , Passer à C ++ et peut-être la discussion GCC aura maintenant besoin de C ++ pour construire sur reddit. Je ne suis pas sûr gccqu'avant 4.8 pourrait être construit avec le compilateur C emballé avec un système d'exploitation arbitraire (et cela vous limiterait à C89 sur beaucoup).
2
Je n'ai pas la particularité de C ++ pour cette question, le problème existe avec C ou tout autre langage, n'est-ce pas?
RemcoGerlich

Réponses:

16

Il s'agit en fait d'un concept bien connu appelé bootstrapping . Fondamentalement, il existe quelque part une base de code C minimale pour construire une version de GCC capable de construire la base de code GCC actuelle. Les langues auto-hébergées font des choses comme ça depuis des décennies.

Mason Wheeler
la source
En fait non. Ce n'est plus le cas (et le problème avec la question). gccne peut plus être construit par un compilateur ac uniquement. La seule garantie avec les compilations gcc qu'elles font est que la version gcc N peut être compilée avec la version gcc N-1.
9
@MichaelT: Mais une version antérieure de GCC peut être construite avec un compilateur C, qui peut ensuite compiler des versions ultérieures écrites en C ++, ce que j'ai dit.
Mason Wheeler
Je voudrais également souligner les questions de la question: However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?- cela présuppose que vous n'avez pas accès aux versions précédentes ni ne traite les autres implications du passage du C au C ++ pour la base de code.
9

La création d'un compilateur écrit dans le même langage qu'il compile s'appelle bootstrapping . L'article de wikipedia décrit un certain nombre de façons de démarrer un compilateur.

Étant donné votre restriction selon laquelle vous ne disposez que d'un code source G ++ postérieur à la version 4.8 et pas de fichiers binaires prédéfinis pour votre plate-forme cible (aucun compilateur C ++ existant), l'amorçage du compilateur G ++ peut être effectué au moyen d' une compilation croisée .

Lors du démarrage d'un compilateur à l'aide de la compilation croisée, vous créez plusieurs versions de votre compilateur

  1. Sur votre PC, vous installez un compilateur C ++ (peut être n'importe quel compilateur C ++, ne doit pas nécessairement être G ++)
  2. En utilisant ce compilateur, vous créez un compilateur croisé G ++ qui peut s'exécuter sur le PC et génère du code pour la plate-forme cible
  3. En utilisant le compilateur croisé G ++ que vous venez de créer, vous créez un compilateur natif G ++ qui peut s'exécuter sur la plate-forme cible et créer du code pour celui-ci.
  4. Vous avez terminé. Vous avez créé un compilateur C ++ pour la nouvelle plate-forme.

Si vous n'avez pas non plus de PC (ou similaire) pour effectuer les étapes initiales, vous êtes en effet coincé, mais les chances d'être dans cette situation et d'essayer d'amorcer un compilateur sont négligeables.

Bart van Ingen Schenau
la source