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?
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?
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 .
Pierwotnie był napisany w jakimś języku asemblerowym, potem sam zaczął produkować karmę dla psów.
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.
6.3 Podkatalog gcc
Katalog gcc zawiera wiele plików, które są częścią źródeł C GCC, inne pliki używane jako część procesu konfiguracji i budowania oraz podkatalogi, w tym dokumentację i pakiet testowy.
Źródła: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html