Это прослушивало меня некоторое время. Как скомпилировать gcc/g ++? Я предполагаю, что каждая ревизия компилируется с ранее построенной версией. Это правда? И если это так, значит ли это, что самые старые версии g ++/gcc были написаны на сборке?Как загружается gcc/g ++?
ответ
Самая старая версия GCC была скомпилирована с использованием другого компилятора C, поскольку были другие, когда они были написаны. Самый первый C-компилятор (1973, IIRC) был реализован либо в сборке PDP-11, либо в предшествующем ему языке программирования B, но в любом случае компилятор B был записан в сборке. Аналогично, первый C++-компилятор (CPre/Cfront, 1979-1983), вероятно, впервые был реализован на C, а затем переписан на C++.
При компиляции GCC или любой другой самостоятельной хостинг компилятор, полный порядок здания:
- Построить новую версию GCC с существующим C компилятор
- заново строить новую версию GCC с тот, который вы только что создали
- (необязательно) повторите шаг 2 для целей проверки.
Этот процесс называется bootstrapping. Он проверяет возможности компилятора компиляции и гарантирует, что результирующий компилятор будет построен со всеми оптимизациями, которые он сам реализует.
EDIT: Drew Dormann, в комментариях, указывает на счет Бьярна Страустрапа earliest implementation of C++. Он был реализован на C++, но переведен на то, что Stroustrup называет «препроцессором» от C++ до C; не полный компилятор по его определению, но все же C++ был загружен в C.
Не повторяется ли шаг 2 несколько раз? Я считаю, что «clang» делает это. – bitmask
Я не понимаю, почему, кроме тестирования. Предполагая, что исходный компилятор правильно реализует язык, он строит правильный, хотя возможно, субоптимальный компилятор, тогда как шаг 2 реализует все оптимизации, которые имеет новый компилятор. Окончательный двоичный файл не должен меняться после шага 2. –
3-ступенчатая версия процесса сборки бутстрапа действительно для проверки: сам компилятор используется как собственный тестовый пример. GCC, скомпилированный с помощью [other], должен давать одинаковые результаты (идентичные двоичные файлы, дисконтирующие макросы, такие как '__DATE__' и' __TIME__', которые различаются даже между вызовами * такого же * компилятора), как GCC, скомпилированный с [GCC, скомпилированным с [другим]] - если нет, это ошибка, и 3-этапная сборка бутстрапов предназначена для того, чтобы поймать это. – pmdj
- 1. Как загружается uboot
- 2. Как загружается файл Instagram?
- 3. Как показать файл загружается?
- 4. Виджет загружается как приложение
- 5. Как загружается удаленный xib?
- 6. CSV загружается как HTM
- 7. Как загружается компьютер?
- 8. как загружается экран загрузки?
- 9. Как загружается плагин nopcommerce?
- 10. Как загружается обновление игры?
- 11. Http-запрос не загружается, как только угловой вид загружается
- 12. Как загружается или загружается сервер KIE с самого начала?
- 13. Xib не загружается, как ожидалось
- 14. Изображение как-то загружается дважды
- 15. Как topSearch загружается в page.xml?
- 16. Как обрабатывать WebView не загружается
- 17. Как загружается HTTP-кеш JavaFX?
- 18. Как загружается этот модуль node.js?
- 19. как оценивать imgs все загружается
- 20. FlexLoader.loadBytes(): Bitmap загружается как MovieClip
- 21. Как узнать, когда загружается AxWindowsMediaPlayer?
- 22. Как возможно, что Nib загружается?
- 23. Как загружается библиотека Angular 2?
- 24. Как проверить, загружается ли DLL?
- 25. Как контролировать, где загружается форма
- 26. CSS файл загружается как изображение
- 27. Facebook как кнопка не загружается
- 28. Как загружается программа в ПЗУ?
- 29. jQuery не загружается и не загружается дважды
- 30. Сайт не загружается, но при обновлении загружается?
Каждая ревизия, наконец, может быть скомпилирована сама по себе. :) –
[This] (http://homepage.ntlworld.com/edmund.grimley-evans/bcompiler.html) интересно читать, если вы хотите увидеть, как появились первые компиляторы. – parkovski
@parkovski Является ли ссылка мертвой? – Nubcake