Как GCC и G ++ загружаются? - PullRequest
182 голосов
/ 24 февраля 2012

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

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

1 Ответ

174 голосов
/ 24 февраля 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...