Non c'è un problema con l'uovo e la gallina dal momento che GCC è scritto nello stesso C ++?


10

Dalla versione 4.8, il compilatore C ++ GCC (la parte G ++ di esso) non è più scritto in C, ma in C ++ stesso. Ho una domanda ipotetica su questo.

Mi chiedo come compilare il codice C ++ di GCC su una nuova piattaforma che non ha ancora un compilatore C ++. Ovviamente, potresti usare binari precompilati compilati su altre macchine. Oppure potresti utilizzare una versione precedente di GCC scritta in C e compilare la versione corrente con essa.

Tuttavia, senza i binari predefiniti e solo la versione più recente, eri bloccato, giusto? In caso contrario, ci sono altre implicazioni su questa situazione sollevate dal passaggio da C a C ++ del progetto GCC?


3
Non sono sicuro di quello che stai chiedendo qui, anche se potresti voler leggere la compilazione incrociata .

5
La piattaforma completamente nuova non avrà compilatore C ++ né compilatore C. La compilazione incrociata è la risposta.
doc

1
Probabilmente si dovrebbe leggere la mossa di GCC di C ++ , Trasferirsi in C ++ e, eventualmente, la discussione GCC sarà ora bisogno di C ++ per costruire su reddit. Non sono sicuro che gccprima di 4.8 potesse essere compilato con il compilatore C impacchettato con un sistema operativo arbitrario (e questo ti limiterebbe a C89 su molti).

2
Non capisco cosa c'è di speciale in C ++ per questa domanda, il problema esiste con C o qualsiasi altra lingua, no?
Remco Gerlich,

Risposte:


16

Questo è in realtà un noto concetto chiamato bootstrapping . Fondamentalmente, esiste, da qualche parte, una base di codice C minima per costruire una versione di GCC in grado di costruire l'attuale base di codice GCC. I linguaggi self-hosting fanno cose del genere da decenni.


In realtà no. Non è più il caso (e il problema con la domanda). gccnon può più essere compilato solo dal compilatore ac. L'unica garanzia con le compilazioni gcc che fanno è che gcc versione N può essere costruita con gcc versione N-1.

9
@MichaelT: Ma una versione precedente di GCC può essere compilata con un compilatore C, che può quindi compilare versioni successive scritte in C ++, che è quello che ho detto.
Mason Wheeler,

Indicherei anche le domande nella domanda: 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?- presuppone che tu non abbia accesso alle versioni precedenti né affronta le altre implicazioni del passaggio da C a C ++ per la base di codice.

9

La creazione di un compilatore scritto nella stessa lingua che viene compilata si chiama bootstrap . L'articolo di Wikipedia descrive una serie di modi in cui un compilatore può essere avviato.

Data la tua limitazione di avere solo un codice sorgente G ++ post-4.8 e nessun binario pre-costruito per la tua piattaforma di destinazione (nessun compilatore C ++ esistente), è possibile eseguire il bootstrap del compilatore G ++ mediante la compilazione incrociata .

Quando si esegue il bootstrap di un compilatore usando la compilazione incrociata, si creano diverse versioni del compilatore

  1. Sul tuo PC, installi un compilatore C ++ (può essere qualsiasi compilatore C ++, non deve essere G ++)
  2. Utilizzando quel compilatore, si crea un cross-compilatore G ++ che può essere eseguito sul PC e genera codice per la piattaforma di destinazione
  3. Utilizzando il compilatore incrociato G ++ appena creato, si crea un compilatore G ++ nativo che può essere eseguito sulla piattaforma di destinazione e creare codice per esso.
  4. Hai fatto. Hai creato un compilatore C ++ per la nuova piattaforma.

Se anche tu non hai un PC (o simile) per eseguire i passaggi iniziali, allora sei davvero bloccato, ma la possibilità di trovarti in quella situazione e provare a avviare un compilatore è trascurabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.