Ответ 1
Самая старая версия GCC была скомпилирована с использованием другого компилятора C, поскольку были другие, когда они были написаны. Самый первый компилятор C (1973 г., IIRC) был реализован либо в сборке PDP-11, либо в предшествующем ему языке программирования B, но в любом случае компилятор B был записан в сборке. Аналогично, первый С++-компилятор (CPre/Cfront, 1979-1983), вероятно, сначала был реализован в C, а затем переписан на С++.
Когда вы компилируете GCC или любой другой компилятор собственного хостинга, полный порядок построения:
- Создать новую версию GCC с существующим компилятором C
- перестроить новую версию GCC с той, которую вы только что создали.
- (необязательно) повторите шаг 2 для целей проверки.
Этот процесс называется bootstrapping. Он проверяет возможность компиляции компиляции и гарантирует, что результирующий компилятор будет построен со всеми оптимизациями, которые он сам реализует.
РЕДАКТИРОВАТЬ: Дрю Дорманн в комментариях указывает на учет Bjarne Stroustrup самой ранней реализации С++. Он был реализован на С++, но переведен на то, что Stroustrup называет "препроцессором" от С++ до C; не полный компилятор по его определению, но все же С++ был загружен в C.