Компилятор gcc C написан на самом C? Или это написано на ассемблере? Если компилятор написан на C, то какой компилятор используется для компиляции кода компилятора?
c
gcc
compiler-construction
эйфория83
источник
источник
Ответы:
Конкретная история gcc приведена в GCC Wiki . Более общий момент заключается в том, что компиляторы обычно изначально компилируются с каким-либо другим компилятором, пока они не станут достаточно мощными, чтобы скомпилировать себя. В качестве альтернативы можно написать базовый компилятор, который может обрабатывать подмножество ваших функций на ассемблере и строить оттуда. Но опять же, в этом почти никогда не было необходимости. Доступно множество компиляторов на разных языках. Даже когда Стивен Джонсон писал pcc (один из первых компиляторов C), были доступны компиляторы для B, а также для многих других языков. У gcc было несколько компиляторов на выбор для его первоначальной сборки, и RMS говорит, что он использовал компилятор Pastel, по крайней мере, во время своей первоначальной разработки.
Помните, что компилятор C не обязательно должен быть написан на C. Вы можете написать его на Perl, если хотите. Не требуется, чтобы компилятор для данной платформы был изначально написан на этой платформе (встроенные системы почти всегда компилируются на какой-либо другой системе). Так что есть много способов начать работу.
В этом вопросе есть несколько интересных тонкостей, связанных с первым экземпляром начальной загрузки компилятора. Если бы вы были очень умны, вы могли бы использовать этот бутстрап, чтобы сделать что-то невероятное, блестящее и устрашающее .
источник
Первоначально он был написан на каком-то ассемблере, а затем стал самим собачьим кормом.
источник
Хотя это, очевидно, очень приблизительный показатель, я нашел этот быстрый список в
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.Ссылка: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html
источник