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

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

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

Обзор Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си Леонардом Тауэром и Ричардом Столлманом и выпущен в 1987 годуTower, Leonard (1987) «GNU C compiler beta test release, » comp.lang.misc USENET newsgroup; see also http://gcc.gnu.org/releases.html#timeline как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software FoundationStallman, 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).

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

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

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

Языки Стандартный компилятор включает в себя front-end’ы для языков: Ada (GCC для Ada, или GNAT), ALGOL 68 (начиная с версии 16.0), Си, C++ (GCC для C++, или G++), Фортран (GCC для Fortran, или gfortran), Objective-C (GCC для Objective-C, или gobjc), Objective-C++ (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. Поддержка языка Java (GCC для Java, или GCJ) удалена из состава GCC начиная с версии 7.

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

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

Alpha ARM Atmel AVR Blackfin HC12 H8/300 x86 (IA-32 и x86-64) IA-64 («Itanium») m68k Motorola 88000 MIPS Texas Instruments MSP430 PA-RISC PDP-11 PowerPC RISC-V R8C/M16C/M32C SPU в Cell System/370, System/390 SuperH SPARC VAX

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

A29K ARC ETRAX CRIS D30V DSP16xx FR-30 FR-V Intel i960 IP2000 M32R 68HC11 MCORE MMIX MN10200 MN10300 Motorola 88000 NS32K ROMP Stormy16 V850 Xtensa AVR32

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

D10V MeP MicroBlaze TI MSP430 TI C6Xhttp://gcc.gnu.org/ "TI C6X processor support [2011-07-15] A port for the TI C6X family of processors " Nios II и Nios PDP-10 TIGCC (вариация Motorola 68000) Z8000 PIC24/dsPIC OpenRISC 1000

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

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

До версии 4.7.2 GCC был почти полностью написан на Си, хотя значительная часть front-end’а для Ады написана на Аде. С разработка была переведена на язык C++C++ Conversion. This project is a continuation of the build GCC in C++ project. / GCC wiki, 2012, версия 4.8GCC 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. " и более поздние требуют для своей сборки наличия компилятора C++, поддерживающего C++ 2003.

Отладка программ, скомпилированных с помощью GCC Главным инструментом для отладки программ, скомпилированных с помощью GCC, является GNU Debugger (gdb). Существуют также узкоспециализированные средства для отладки: Valgrind для поиска утечек памяти GNU Profiler () используется для того, чтобы определить, сколько времени уходит на выполнение той или иной части программы, как часто вызываются те или иные процедуры; для использования gprof необходимо компилировать программу со специальными опциями для включения «профилирования». gcov для анализа покрытия кода.

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

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

См. также MinGW Portable C Compiler (PCC) Sun Studio LLVM Open Watcom Cygwin Библиотека libJIT Amsterdam Compiler Kit

Примечания

Литература

Ссылки Официальный сайт GCC. Building and Testing gcc/glibc cross toolchains. From Source to Binary: The Inner Workings of GCC. Overview and explanation of gcc’s internal structure in Red Hat Magazine. Dev-C++ — интегрированная среда, включающая в себя компилятор MinGW. Code::Blocks — ещё одна интегрированная среда разработки + компилятор MinGW. Производительность компиляторов C++.

Категория:Компиляторы Си Категория:Компиляторы C++ Категория:Компиляторы Objective-C Категория:Компиляторы Фортрана Compiler Collection Категория:Кроссплатформенное программное обеспечение Категория:Программное обеспечение для Linux Категория:Программное обеспечение для Windows Категория:Программное обеспечение для macOS Категория:Программное обеспечение для OpenSolaris Категория:Программное обеспечение для Solaris Категория:Программное обеспечение для Haiku Категория:Свободные компиляторы и интерпретаторы Категория:Программное обеспечение с лицензией GNU GPL Категория:GNU Категория:Компиляторы Модулы-2