Является ли компилятор gcc C написанным на языке C?

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ниже приведен список top file-counts (более 100), сгруппированный по расширению, в котором доминируют файлы 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, другие файлы, используемые как часть конфигурации и сборки процесс и подкаталоги, включая документацию и testuite.

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