Это беспокоило меня некоторое время. Как GCC и G ++ компилируются сами?
Я предполагаю, что каждая ревизия компилируется с ранее созданной ревизией. Это правда? И если это так, значит ли это, что самые старые версии g ++ и GCC были написаны на ассемблере?
c++
c
compiler-construction
user1010005
источник
источник
Ответы:
Самая старая версия GCC была скомпилирована с использованием другого компилятора Си, поскольку были и другие, когда она была написана. Самый первый C-компилятор (приблизительно 1973, IIRC) был реализован либо в сборке PDP-11 , либо в языке программирования B, который предшествовал ему, но в любом случае B-компилятор был написан на ассемблере.
Точно так же первый в мире компилятор C ++ (CPre / Cfront , 1979-1983), вероятно, был сначала реализован на C, а затем переписан на C ++.Когда вы компилируете GCC или любой другой автономный компилятор, полный порядок сборки:
Этот процесс называется начальной загрузкой . Он проверяет способность компилятора компилировать себя и проверяет, что полученный компилятор построен со всеми оптимизациями, которые он сам реализует.
РЕДАКТИРОВАТЬ : Дрю Дорманн, в комментариях, указывает на рассказ Бьярн Страуструп о самой ранней реализации C ++ . Он был реализован на C ++, но переведен тем, что Страуструп называет «препроцессором» с C ++ на C; не полный компилятор по его определению, но C ++ был загружен в C.
источник
__DATE__
и__TIME__
различаются даже между вызовами одного и того же компилятора), как GCC, скомпилированный с [GCC, скомпилированный с [other]] - если нет, это ошибка Трехэтапная сборка начальной загрузки предназначена для этого.