Как загружаются gcc / g++?

это беспокоило меня некоторое время. Как gcc / g++ компилируют себя? Я предполагаю, что каждая ревизия компилируется с ранее построенной ревизией. Это правда? И если это так, означает ли это, что самые старые версии g++/gcc были написаны в сборке?

1 ответов


самая старая версия GCC была скомпилирована с использованием другого компилятора C, так как были другие, когда она была написана. Самый первый компилятор C когда-либо (ca. 1973, IIRC) был реализован либо в PDP-11 сборка или на языке программирования B, который ей предшествовал, но в любом случае компилятор B был написан в сборке. аналогично, первый компилятор C++ (CPre/команда, 1979-1983), вероятно, были сначала реализованы в C, а затем переписаны в С.++

при компиляции gcc или любой другой самостоятелен компилятор, полный порядок строительства является:

  1. создайте новую версию GCC с существующим компилятором C
  2. перестроить новую версию GCC с той, которую вы только что построили
  3. (необязательно) повторите шаг 2 для проверки.

этот процесс называется bootstrapping. Он проверяет способность компилятора компилировать себя и убеждается, что результирующий компилятор построен со всеми оптимизациями, которые он сам реализует.

редактировать: Дрю Дорманн в комментариях указывает на рассказ Бьярне Страуструпа о самая ранняя реализация C++. Он был реализован на C++ , но переведен тем, что Страуструп называет "препроцессором" с C++ на C; не полный компилятор по его определению, но все же C++ был загружен в C.