Компилятор gcc C написан на самом C? Или это написано на ассемблере? Если компилятор написан на C, то какой компилятор используется для компиляции кода компилятора?
Компилятор gcc C написан на самом C? Или это написано на ассемблере? Если компилятор написан на C, то какой компилятор используется для компиляции кода компилятора?
Ответы:
Конкретная история 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.
6.3 Подкаталог gcc
Каталог gcc содержит множество файлов, которые являются частью исходных текстов GCC на C, другие файлы, используемые как часть процесса настройки и сборки, а также подкаталоги, включая документацию и набор тестов.
Ссылка: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html