Non c'è un problema di gallina e uovo dal momento che GCC è scritto in C ++ stesso?

7

Dalla versione 4.8, il compilatore C ++ GCC (la parte G ++ di esso) è scritto non più in C, ma nello stesso C ++. 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 ++. Naturalmente, è possibile utilizzare binari precompilati compilati su altre macchine. Oppure potresti usare una versione precedente di GCC che è stata scritta in C e compilare con essa la versione corrente.

Tuttavia, senza binari precompilati 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?

    
posta danijar 12.12.2014 - 02:53
fonte

2 risposte

13

Questo è in realtà un concetto ben noto chiamato bootstrap . Fondamentalmente, esiste, da qualche parte, un codebase C minimo per costruire una versione di GCC che sia in grado di costruire l'attuale base di codice GCC. Le lingue di self-hosting hanno fatto cose del genere per decenni.

    
risposta data 12.12.2014 - 03:53
fonte
7

La creazione di un compilatore scritto nella stessa lingua che compila si chiama bootstrap . L'articolo di wikipedia descrive un certo numero di modi in cui un compilatore può essere riavviato.

Data la tua restrizione che hai solo un codice sorgente G ++ post-4.8 e nessun binario pre-costruito per la tua piattaforma di destinazione (nessun compilatore C ++ esistente), allora il bootstrap del compilatore G ++ può essere fatto per mezzo di cross-compilation .

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

  1. Sul PC, si installa un compilatore C ++ (può essere un qualsiasi compilatore C ++, non deve essere G ++)
  2. Usando quel compilatore, crei un cross-compiler G ++ che può essere eseguito sul PC e genera codice per la piattaforma di destinazione
  3. Usando il cross-compilatore G ++ appena creato, puoi creare un compilatore G ++ nativo che può essere eseguito sulla piattaforma di destinazione e creare il codice per esso.
  4. Hai finito. Hai creato un compilatore C ++ per la nuova piattaforma.

Se anche tu non hai un PC (o simile) per eseguire i primi passi, allora sei davvero bloccato, ma la possibilità di trovarti in quella situazione e provare a eseguire il bootstrap di un compilatore sono trascurabili.

    
risposta data 12.12.2014 - 10:38
fonte

Leggi altre domande sui tag