2011-04-14 20 views
71

Il compilatore gcc C è scritto in C? O è scritto in Assembly? Se il compilatore è scritto in C, allora qual è il compilatore usato per compilare il codice del compilatore?Il compilatore gcc C è scritto in C?

+11

sì lo è (per lo più). Naturalmente, per compilare C è necessario un compilatore C, quindi, come con la maggior parte dei compilatori, esiste una serie di fasi "boot-strap". L'idea generale è trattata in [Installazione di GCC: Building] (http://gcc.gnu.org/install/build.html) e [Installazione di GCC - LFS] (http://www.linuxfromscratch.org/lfs/ view/sviluppo/chapter05/gcc-pass2.html). –

+0

@mu: questo è il prossimo passo. – euphoria83

+2

Diverse workstation di marca negli anni '80 e nei primi anni '90 avevano i propri ambienti unix con c compilatore, strumenti, ecc ... che erano tutti leggermente diversi l'uno dall'altro.Con la fonte GCC si può fare una prima compilazione di gcc su una di queste piattaforme, e quindi compilare gcc con se stesso alcune volte per controllare più o meno per un punto fisso. – Paul

risposta

82

La cronologia specifica di gcc viene fornita allo GCC Wiki. Il punto più generale è che i compilatori sono in genere compilati originariamente con qualche altro compilatore finché non sono abbastanza potenti da essere compilati. In alternativa, è possibile scrivere un compilatore di base in grado di gestire un sottoinsieme delle funzionalità in assembler e creare da lì. Ma ancora, questo non è quasi mai più necessario. Ci sono molti compilatori disponibili, in una varietà di lingue. Anche quando Stephen Johnson stava scrivendo pcc (uno dei primi compilatori C), c'erano i compilatori per B disponibili, insieme a molte altre lingue. gcc aveva diversi compilatori tra cui scegliere per crearlo in origine, e RMS dice che stava usando il compilatore Pastel almeno durante il suo sviluppo iniziale.

Ricordate, non è richiesto che un compilatore C sia scritto in C. Potete scriverlo in Perl se lo si desidera. Non è richiesto che un compilatore per una data piattaforma sia originariamente scritto su quella piattaforma (i sistemi embedded sono quasi sempre compilati su qualche altro sistema). Quindi ci sono molti modi per farti bootstrap.

Questa domanda presenta alcune sottigliezze interessanti relative alla prima istanza di bootstrap del compilatore. Se tu fossi molto intelligente, potresti fare uso di questo bootstrap per fare something incredible, brilliant and terrifying.

+10

+1 per il link Ritchie, è sempre una buona lettura. :) – unwind

+0

Woah, il secondo articolo a cui ti sei collegato è follemente intelligente. – Ponkadoodle

+4

Ora usano alcuni [C++ in gcc] (http://lwn.net/Articles/542457/). –

49

Originariamente era stato scritto in alcune lingue di assemblaggio, quindi ha iniziato a dare da mangiare al cane stesso.

+15

+1 Ama il fraseggio. –

+1

Non ho visto alcun riferimento a RMS usando l'assemblatore per il bootstrap originale. Qual è la tua fonte per questo? Aveva molti altri compilatori con cui fare il bootstrap, quindi sembra molto lavoro. –

+14

Anche se il termine era bootstrap. –

3

Mentre questo è ovviamente solo un indicatore molto approssimativo, ho trovato questo rapido elenco nella directory gcc-5.1.0-src/gcc/ interessante. Questa directory contiene le principali fonti di GCC stesso (ad eccezione delle librerie di runtime).

Ecco i migliori file-conta (oltre 100) raggruppati per estensione dominato da file C e C++.

112 .opt 
    118 .def 
    140 .cc 
    185 .x 
    250 .exp 
    353 .md 
    366 .mm 
    414 .f 
    430 .f03 
    521 .m 
    625 .a 
    1082 .go 
    1371 .h 
    1602 .ads 
    1655 .adb 
    1828 .ada 
    3860 .f90 
    11231 .C  // C++ 
    23811 .c  // C 

prega di notare che al giorno d'oggi GCC si riferisce alla GNU Compiler Collection, non solo la GNU C Compiler.

6,3 sottodirectory gcc

La directory GCC contiene molti file che fanno parte delle fonti C di GCC, altri file utilizzati come parte della configurazione e costruire processo, e sottodirectory compresa la documentazione e una suite di test.

Riferimento:https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html

Problemi correlati