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