Компилятор gcc C написан на самом C? - PullRequest
80 голосов
/ 14 апреля 2011

Компилятор gcc C написан на самом C? Или это написано на ассемблере? Если компилятор написан на C, то какой компилятор используется для компиляции кода компилятора?

Ответы [ 3 ]

90 голосов
/ 14 апреля 2011

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

Помните, что нет требования, чтобы компилятор C был написан на C.мог бы написать это на Perl, если бы захотел.Не требуется, чтобы компилятор для данной платформы был изначально написан на этой платформе (встроенные системы почти всегда компилируются в какой-то другой системе).Таким образом, есть много способов получить самозагрузку.

В этом вопросе есть некоторые интересные тонкости, связанные с первым случаем начальной загрузки компилятора.Если бы вы были очень умны, вы могли бы использовать этот загрузчик, чтобы сделать что-то невероятное, блестящее и страшное .

51 голосов
/ 14 апреля 2011

Первоначально оно было написано на каком-то ассемблере, после чего оно начало само кормить собаку.

3 голосов
/ 30 октября 2015

Хотя это, очевидно, очень грубый показатель, я нашел этот быстрый список в каталоге gcc-5.1.0-src/gcc/ интересным. Этот каталог содержит основные источники самого GCC (кроме библиотек времени выполнения).

Вот список верхних файлов (более 100), сгруппированных по расширению с преобладанием файлов C и C ++.

    112 .opt
    118 .def
    140 .cc
    185 .x
    250 .exp
    353 .md
    366 .mm
    414 .f
    430 .f03
    521 .m
    625 .a
   1082 .go
   1371 .h
   1602 .ads
   1655 .adb
   1828 .ada
   3860 .f90
  11231 .C        // C++ 
  23811 .c        // C 

Обратите внимание, что в настоящее время GCC относится к коллекции компиляторов GNU, а не только к компилятору GNU C.

6.3 Подкаталог gcc

Каталог gcc содержит много файлов, которые являются частью источников C GCC, другие файлы, используемые как часть конфигурации и сборки процесс и подкаталоги, включая документацию и набор тестов.

Ссылка: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html

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