Чи написаний компілятор gcc C самою мовою C? Або це написано в Асамблеї? Якщо компілятор написаний на мові C, то для чого компілятор використовується для компіляції коду компілятора?
Чи написаний компілятор gcc C самою мовою C? Або це написано в Асамблеї? Якщо компілятор написаний на мові C, то для чого компілятор використовується для компіляції коду компілятора?
Відповіді:
Конкретна історія gcc подана на Wiki GCC . Більш загальний момент полягає в тому, що компілятори, як правило, спочатку компілюються з яким-небудь іншим компілятором, поки вони не є достатньо потужними для компіляції. Крім того, можна написати базовий компілятор, який може обробляти підмножину ваших функцій в асемблері та створювати звідти. Але знову ж таки, це майже ніколи не потрібно. Доступно безліч компіляторів різними мовами. Навіть коли Стівен Джонсон писав ПКК (один із перших компіляторів С), існували компілятори для мови В, поряд з багатьма іншими мовами. 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 містить багато файлів, які є частиною джерел C GCC, інші файли, що використовуються як частина процесу конфігурації та побудови, а також підкаталоги, включаючи документацію та тестовий набір.
Довідково: https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html