Czy kompilator gcc C jest napisany w samym C? Czy jest napisane w Zgromadzeniu? Jeśli kompilator jest napisany w C, to jaki jest kompilator używany do kompilowania kodu kompilatora?
c
gcc
compiler-construction
euforia83
źródło
źródło
Odpowiedzi:
Specyficzna historia gcc jest podana na GCC Wiki . Bardziej ogólnym punktem jest to, że kompilatory są generalnie pierwotnie kompilowane z innym kompilatorem, dopóki nie będą wystarczająco mocne, aby się skompilować. Alternatywnie, możliwe jest napisanie podstawowego kompilatora, który może obsłużyć podzbiór twoich funkcji w asemblerze i zbudować go z tego miejsca. Ale znowu, prawie nigdy nie jest to już potrzebne. Dostępnych jest wiele kompilatorów w różnych językach. Nawet kiedy Stephen Johnson pisał pcc (jeden z pierwszych kompilatorów C), były dostępne kompilatory dla B, wraz z wieloma innymi językami. gcc miał kilka kompilatorów do wyboru, aby go pierwotnie zbudować, a RMS twierdzi, że korzystał z kompilatora Pastel przynajmniej podczas początkowego rozwoju.
Pamiętaj, nie ma wymogu, aby kompilator C był napisany w C. Mógłbyś napisać go w Perlu, gdybyś chciał. Nie ma wymogu, aby kompilator dla danej platformy był oryginalnie napisany na tej platformie (systemy wbudowane prawie zawsze są kompilowane na innym systemie). Jest więc wiele sposobów, aby dać się złapać.
To pytanie ma kilka interesujących subtelności związanych z pierwszym uruchomieniem kompilatora. Gdybyś był bardzo sprytny, mógłbyś wykorzystać ten bootstrap do zrobienia czegoś niesamowitego, genialnego i przerażającego .
źródło
Pierwotnie był napisany w jakimś języku asemblerowym, potem sam zaczął produkować karmę dla psów.
źródło
Chociaż jest to oczywiście tylko bardzo przybliżony wskaźnik, uznałem tę szybką listę w
gcc-5.1.0-src/gcc/
katalogu za interesującą. Ten katalog zawiera główne źródła samego GCC (z wyjątkiem bibliotek wykonawczych).Oto najważniejsze liczby plików (ponad 100) pogrupowane według rozszerzenia zdominowanego przez pliki C i 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
Zwróć uwagę, że obecnie
GCC
odnosi się do kolekcji kompilatorów GNU, a nie tylko do kompilatora GNU C.Źródła: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html
źródło