Является ли компилятор gcc C написанным на самом C? Или это написано на Ассамблее? Если компилятор написан на C, то каков компилятор, используемый для компиляции кода компилятора?
Является ли компилятор gcc 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