Как GCC и g++ загружаются?

Это беспокоило меня некоторое время. Как GCC и g++ компилируют себя?

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

Ответ 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.