Открыть главное меню

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

GNU Compiler Collection
GNU Compiler Collection logo.svg
Gcc-4.1.1.png
Использование GCC в графическом интерфейсе командной оболочки BASH, ОС Ubuntu
Тип компилятор[3]
Разработчик Проект GNU
Написана на C++
Интерфейс интерфейс командной строки
Операционная система Linux[4], GNU Hurd[4] и Microsoft Windows[4]
Первый выпуск 23 мая 1987[1]
Аппаратная платформа кроссплатформенность
Последняя версия
Лицензия GNU GPL 3
Сайт gcc.gnu.org​ (англ.)
Commons-logo.svg Медиафайлы на Викискладе

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

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

ОбзорПравить

Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си Леонардом Тауэром (англ. Leonard H. Tower Jr.) и Ричардом Столлманом[5] и выпущен в 1987 году[6] как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software Foundation[7].

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

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

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

ЯзыкиПравить

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

  • Ada (GCC для Ada, или GNAT),
  • Си,
  • C++ (C++ для GCC, или G++),
  • Фортран (GCC для Fortran, или gfortran),
  • Java (GCC для Java, или GCJ, исключена из состава GCC начиная с версии 7[8]),
  • Objective-C (GCC для Objective-C, или gobjc),
  • Objective-C++ (GCC для Objective-C++, или gobjc++),
  • Go (GCC для Go, или gccgo) (с версии 4.6[9]).
  • D (GCC для D, или GDC[10], начиная с версии 9.1[11])

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

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

АрхитектурыПравить

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

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

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

СтруктураПравить

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

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

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

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

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

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

ЛицензияПравить

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

КритикаПравить

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

См. такжеПравить

ПримечанияПравить

  1. https://www.gnu.org/software/gcc/releases.html
  2. https://github.com/gcc-mirror/gcc/releases/tag/gcc-9_2_0-release — 2019.
  3. https://gcc.gnu.org/
  4. 1 2 3 Installing GCC - GNU Project - Free Software Foundation (FSF)
  5. Stallman, Richard M. GNU Status (неопр.) // GNU's Bulletin. — Free Software Foundation, 1986. — February (т. 1, № 1).
  6. Tower, Leonard (1987) «GNU C compiler beta test release,» comp.lang.misc USENET newsgroup; see also http://gcc.gnu.org/releases.html#timeline
  7. Stallman, Richard M. (2001) «Contributors to GCC,» in Using and Porting the GNU Compiler Collection (GCC) for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
  8. GCC 7 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF). gcc.gnu.org. Дата обращения 31 августа 2019.
  9. GCC 4.6 Release Series — Changes, New Features, and Fixes — GNU Project — Free Software Foundation (FSF)
  10. GDC - D Programming Language for GCC. gdcproject.org. Дата обращения 31 августа 2019.
  11. GCC 9 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF). gcc.gnu.org. Дата обращения 31 августа 2019.
  12. http://gcc.gnu.org/ "TI C6X processor support [2011-07-15] A port for the TI C6X family of processors "
  13. C++ Conversion. This project is a continuation of the build GCC in C++ project. / GCC wiki, 2012  (англ.)
  14. GCC 4.8 Release Series: "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. "
  15. Tools: GCC 4.2.1 Released — KernelTrap (англ.). kerneltrap.org (21 July 2007). Дата обращения 25 декабря 2009. Архивировано 17 февраля 2012 года.
  16. More on OpenBSD’s new compiler — Mambo Архивировано 29 сентября 2008 года.
  17. Towards a BSD-licensed Compiler (недоступная ссылка). Дата обращения 3 ноября 2008. Архивировано 24 октября 2008 года.
  18. FreeBSD Status Reports January — March, 2009

ЛитератураПравить

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

СсылкиПравить