Конкретная история для gcc приведена на GCC Wiki .Более общий момент заключается в том, что компиляторы обычно изначально компилируются с другим компилятором, пока они не станут достаточно мощными, чтобы компилировать себя.Кроме того, можно написать базовый компилятор, который может обрабатывать подмножество ваших функций в ассемблере и создавать его оттуда.Но опять же, это почти никогда не нужно больше.Существует множество доступных компиляторов на разных языках.Даже когда Стивен Джонсон писал pcc (один из первых C-компиляторов), были доступны компиляторы для B, наряду со многими другими языками.У gcc было несколько компиляторов, из которых можно было выбирать, чтобы создать его изначально, и RMS говорит, что он использовал компилятор Pastel, по крайней мере, во время своей первоначальной разработки.
Помните, что нет требования, чтобы компилятор C был написан на C.мог бы написать это на Perl, если бы захотел.Не требуется, чтобы компилятор для данной платформы был изначально написан на этой платформе (встроенные системы почти всегда компилируются в какой-то другой системе).Таким образом, есть много способов получить самозагрузку.
В этом вопросе есть некоторые интересные тонкости, связанные с первым случаем начальной загрузки компилятора.Если бы вы были очень умны, вы могли бы использовать этот загрузчик, чтобы сделать что-то невероятное, блестящее и страшное .