Interested Article - GNU Compiler Collection

GNU Compiler Collection (обычно используется сокращение GCC ) — набор компиляторов для различных языков программирования , разработанный в рамках проекта GNU . GCC является свободным программным обеспечением , распространяется в том числе фондом свободного программного обеспечения (FSF) на условиях GNU GPL и GNU LGPL и является ключевым компонентом GNU toolchain . Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем .

Изначально названный GNU C Compiler , поддерживал только язык Си . Позднее GCC был расширен для компиляции исходных кодов на таких языках программирования, как C++ , Objective-C , Java , Фортран , Ada , Go , GAS и D .

С версии 4.2.2 GCC перешёл на лицензию GPLv3 .

Обзор

Начало GCC было положено Ричардом Столлманом , который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль ; позднее компилятор был переписан на языке Си Леонардом Тауэром и Ричардом Столлманом и выпущен в 1987 году как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software Foundation .

В настоящее время GCC поддерживается группой программистов со всего мира. GCC является лидером по количеству процессоров и операционных систем , которые он поддерживает.

Будучи официальным компилятором системы GNU , GCC также является главным компилятором для сборки ряда других операционных систем; среди них — различные варианты Linux и BSD (ранее, в настоящее время используется Clang LLVM ), а также ReactOS , macOS , OpenSolaris , NeXTSTEP , BeOS и Haiku .

GCC часто выбирается для разработки программного обеспечения, которое должно работать на большом числе различных аппаратных платформ. Различия между «родными» для каждой из аппаратных платформ компиляторами приводят к трудностям при разработке кода, который бы корректно компилировался разными компиляторами, а кроме того, при использовании различных компиляторов сильно усложняются сборочные скрипты, которые должны собирать ПО для всех аппаратных платформ. При использовании GCC для компиляции кода под разные платформы будет использован один и тот же синтаксический анализатор . Поэтому, если удалось собрать программу для одной из целевых платформ, то велика вероятность, что программа нормально соберётся и для других платформ.

Языки

Cтандартный компилятор включает в себя front-end’ы для языков:

  • Ada (GCC для Ada, или GNAT ),
  • Си ,
  • C++ (GCC для C++, или G++),
  • Фортран (GCC для Fortran, или gfortran ),
  • Java (GCC для Java, или GCJ, исключена из состава GCC начиная с версии 7 ),
  • Objective-C (GCC для Objective-C, или gobjc),
  • (GCC для Objective-C++, или gobjc++),
  • Go (GCC для Go, или gccgo) (с версии 4.6 ).
  • D (GCC для D, или GDC , начиная с версии 9.1 )
  • Модула-2 (GCC для Модула-2, или gm2 , начиная с версии 13.1)

Front-end для CHILL был добавлен ранее, но из-за недостаточной поддержки был исключён из набора. До выхода версии 4.0 front-end’ом для Fortran был G77, который поддерживал лишь FORTRAN 77. В новых версиях G77 был исключён в пользу нового GFortran front-end, который поддерживает Fortran 95.

Также существуют сторонние front-end’ы для Pascal , Modula-2 , Modula-3 , Mercury , VHDL и PL/I .

Архитектуры

Список поддерживаемых GCC (для версии 7.1) процессоров включает в себя

Менее известные процессоры, поддерживаемые в стандартном релизе:

Дополнительные типы архитектур и процессоров, которые поддерживаются версиями GCC, но поддержкой которых занимаются сторонние организации (не Фонд свободного программного обеспечения):

Структура

Внешний интерфейс GCC является стандартом для компиляторов на платформе UNIX. Пользователь вызывает управляющую программу, которая называется gcc . Она интерпретирует аргументы командной строки, определяет и запускает для каждого входного файла свои компиляторы нужного языка, запускает, если необходимо, ассемблер и компоновщик .

Компилятор каждого языка является отдельной программой, которая получает исходный текст и порождает вывод на языке ассемблера . Все компиляторы имеют общую внутреннюю структуру: front-end, который производит синтаксический разбор и порождает абстрактное синтаксическое дерево , и back end, который конвертирует дерево в (RTL), выполняет различные оптимизации, затем порождает программу на языке ассемблера, используя архитектурно-зависимое сопоставление с образцом .

До версии 4.7.2 GCC был почти полностью написан на Си , хотя значительная часть front-end’а для Ады написана на Аде . С 14 августа 2012 года разработка была переведена на язык C++ , версия 4.8 и более поздние требуют для своей сборки наличия компилятора C++, поддерживающего C++ 2003.

Отладка программ, скомпилированных с помощью GCC

Главным инструментом для отладки программ, скомпилированных с помощью GCC, является GNU Debugger (gdb). Существуют также узкоспециализированные средства для отладки:

  • Valgrind для поиска утечек памяти
  • ( ) используется для того, чтобы определить, сколько времени уходит на выполнение той или иной части программы, как часто вызываются те или иные процедуры; для использования gprof необходимо компилировать программу со специальными опциями для включения «профилирования».
  • gcov для анализа покрытия кода .

Лицензия

GCC версии 4.2.1 стал последним релизом, выпущенным под GNU General Public License версии 2 . Все последующие версии лицензируются по GPL версии 3 .

Критика

Некоторые разработчики OpenBSD , например Тео де Раадт и ( Otto Moerbeek ), критикуют GCC , называя его «громоздким, глючным, медленным и генерирующим плохой код» . По причине такого критического отношения, а также из-за довольно ограничивающей (по сравнению с BSD) лицензии GPL, под которой выпущена коллекция компиляторов, была предпринята попытка заменить в NetBSD и OpenBSD GCC другими компиляторами, например, PCC . Аналогичная работа по замене GCC на Clang ведётся во FreeBSD .

См. также

Примечания

  1. Biener R. — 2023.
  2. Stallman, Richard M. (неопр.) // GNU's Bulletin. — Free Software Foundation, 1986. — February ( т. 1 , № 1 ). 21 августа 2007 года.
  3. Tower, Leonard (1987) « от 5 ноября 2011 на Wayback Machine » comp.lang.misc USENET newsgroup; see also от 28 декабря 2006 на Wayback Machine
  4. Stallman, Richard M. (2001) « от 3 января 2007 на Wayback Machine » in от 27 декабря 2006 на Wayback Machine for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
  5. . gcc.gnu.org. Дата обращения: 31 августа 2019. 2 сентября 2020 года.
  6. . Дата обращения: 23 января 2011. 4 ноября 2015 года.
  7. . gdcproject.org. Дата обращения: 31 августа 2019. 6 августа 2019 года.
  8. . gcc.gnu.org. Дата обращения: 31 августа 2019. 19 февраля 2022 года.
  9. от 11 января 2012 на Wayback Machine "TI C6X processor support [2011-07-15] A port for the TI C6X family of processors "
  10. от 14 октября 2012 на Wayback Machine / GCC wiki, 2012 (англ.)
  11. от 8 декабря 2015 на Wayback Machine : "GCC now uses C++ as its implementation language. This means that to build GCC from sources, you will need a C++ compiler that understands C++ 2003. "
  12. (англ.) . kerneltrap.org (21 июля 2007). Дата обращения: 25 декабря 2009. 17 февраля 2012 года.
  13. 29 сентября 2008 года.
  14. . Дата обращения: 3 ноября 2008. Архивировано из 24 октября 2008 года.
  15. . Дата обращения: 19 апреля 2010. 17 апреля 2010 года.

Литература

  • Артур Гриффитс. GCC. Настольная книга пользователей, программистов и системных администраторов. — Диасофт, 2004. — С. 624. — ISBN 966-7992-34-9 .

Ссылки

  • . Overview and explanation of gcc’s internal structure in Red Hat Magazine.
  • — интегрированная среда, включающая в себя компилятор MinGW .
  • — ещё одна интегрированная среда разработки + компилятор MinGW.
  • .
Источник —

Same as GNU Compiler Collection