Il compilatore gcc C è scritto in C stesso? O è scritto in Assembly? Se il compilatore è scritto in C, qual è il compilatore utilizzato per compilare il codice del compilatore?
Il compilatore gcc C è scritto in C stesso? O è scritto in Assembly? Se il compilatore è scritto in C, qual è il compilatore utilizzato per compilare il codice del compilatore?
Risposte:
La cronologia specifica di gcc è fornita nel Wiki di GCC . Il punto più generale è che i compilatori sono generalmente originariamente compilati con qualche altro compilatore fino a quando non sono abbastanza potenti da compilarsi da soli. In alternativa, è possibile scrivere un compilatore di base in grado di gestire un sottoinsieme delle funzionalità in assembler e creare da lì. Ma ancora una volta, questo non è quasi mai più necessario. Sono disponibili molti compilatori, in una varietà di lingue. Anche quando Stephen Johnson scriveva pcc (uno dei primi compilatori C), erano disponibili compilatori per B, insieme a molti altri linguaggi. gcc aveva diversi compilatori tra cui scegliere per crearlo originariamente, e RMS dice che stava usando il compilatore Pastel almeno durante il suo sviluppo iniziale.
Ricorda, non è necessario che un compilatore C sia scritto in C. Se lo desideri, potresti scriverlo in Perl. Non è richiesto che un compilatore per una data piattaforma sia originariamente scritto su quella piattaforma (i sistemi embedded quasi sempre sono compilati su qualche altro sistema). Quindi ci sono molti modi per farti eseguire il bootstrap.
Questa domanda ha alcune sottigliezze interessanti relative alla prima istanza di bootstrap del compilatore. Se fossi molto intelligente, potresti usare quel bootstrap per fare qualcosa di incredibile, brillante e terrificante .
Originariamente era scritto in un linguaggio assembly, poi iniziò a mangiare per cani stesso.
Sebbene questo sia ovviamente solo un indicatore molto approssimativo, ho trovato interessante questo elenco rapido nella gcc-5.1.0-src/gcc/
directory. Questa directory contiene i sorgenti principali di GCC stesso (ad eccezione delle librerie di runtime).
Ecco i conteggi dei file principali (oltre 100) raggruppati per estensione dominata dai 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
Si noti che oggigiorno si GCC
fa riferimento alla GNU Compiler Collection, non solo al GNU C Compiler.
6.3 La sottodirectory gcc
La directory gcc contiene molti file che fanno parte dei sorgenti C di GCC, altri file usati come parte del processo di configurazione e compilazione e sottodirectory inclusa la documentazione e una suite di test.
Riferimento: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html