Martwi mnie to od dłuższego czasu. Jak się kompilują GCC i g ++?
Zgaduję, że każda wersja jest kompilowana z poprzednio zbudowaną wersją. Czy to prawda? A jeśli tak, to czy oznacza to, że najstarsze wersje g ++ i GCC zostały napisane w asemblerze?
c++
c
compiler-construction
użytkownik1010005
źródło
źródło
Odpowiedzi:
Najstarsza wersja GCC została skompilowana przy użyciu innego kompilatora C, ponieważ były inne, kiedy był napisany. Pierwszy kompilator C w historii (ok. 1973 r., IIRC) został zaimplementowany albo w zestawie PDP-11 , albo w języku programowania B, który go poprzedzał, ale w każdym razie kompilator B został napisany w zestawie.
Podobnie, pierwszy w historii kompilator C ++ (CPre / Cfront , 1979-1983) został prawdopodobnie najpierw zaimplementowany w C, a następnie przepisany w C ++.Podczas kompilacji GCC lub innego kompilatora samonośnego pełna kolejność budowania jest następująca:
Ten proces nazywa się ładowaniem początkowym . Testuje zdolność kompilatora do samodzielnej kompilacji i upewnia się, że wynikowy kompilator jest zbudowany ze wszystkimi optymalizacjami, które sam implementuje.
EDYCJA : Drew Dormann w komentarzach wskazuje na konto Bjarne Stroustrup dotyczące najwcześniejszej implementacji C ++ . Został zaimplementowany w C ++, ale przetłumaczony przez to, co Stroustrup nazywa „preprocesorem” z C ++ do C; według definicji nie jest to pełny kompilator, ale C ++ został załadowany w C.
źródło
__DATE__
i__TIME__
które różnią się nawet między wywołaniami tego samego kompilatora) jak GCC skompilowany z [GCC skompilowanym z [other]] - jeśli nie, to jest błąd i 3-etapowa kompilacja bootstrap została zaprojektowana tak, aby to złapać.