GNU Compiler Collection
| GNU Compiler Collection | |
|---|---|
| Тип | Оптимизация компилятора и пакет GNU[вд] |
| Разработчик | Проект GNU |
| Написана на | C++ и Си |
| Операционные системы | GNU/Linux[5] и BSD[вд][6] |
| Дата выпуска | 23 мая1987[1] |
| Аппаратная платформа | кроссплатформенность |
| Последняя версия | |
| Тестовая версия | |
| Репозиторий | gcc.gnu.org/git/gcc.git |
| Лицензия | GNU GPL 3 |
| Сайт | gcc.gnu.org (англ.) |
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 году[7]),Фортран,Ada,Go,GAS иD.
С версии 4.2.2 GCC перешёл на лицензиюGPLv3.
Обзор
[править |править код]Начало GCC было положеноРичардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языкаПаскаль; позднее компилятор был переписан на языке СиЛеонардом Тауэром и Ричардом Столлманом[8] и выпущен в 1987 году[9] как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируетсяFree Software Foundation[10].
В настоящее время GCC поддерживается группой программистов со всего мира. GCC является лидером по количествупроцессоров иоперационных систем, которые он поддерживает.
Будучи официальным компилятором системыGNU, GCC также является главным компилятором для сборки ряда других операционных систем; среди них — различные вариантыLinux иBSD (ранее, в настоящее время используетсяClangLLVM), а такжеReactOS,macOS,OpenSolaris,NeXTSTEP,BeOS иHaiku.
GCC часто выбирается для разработки программного обеспечения, которое должно работать на большом числе различных аппаратных платформ. Различия между «родными» для каждой из аппаратных платформ компиляторами приводят к трудностям при разработке кода, который бы корректно компилировался разными компиляторами, а кроме того, при использовании различных компиляторов сильно усложняются сборочные скрипты, которые должны собирать ПО для всех аппаратных платформ. При использовании GCC для компиляции кода под разные платформы будет использован один и тот жесинтаксический анализатор. Поэтому, если удалось собрать программу для одной из целевых платформ, то велика вероятность, что программа нормально соберётся и для других платформ.
Языки
[править |править код]Стандартный компилятор включает в себяfront-end’ы для языков:
- Ada (GCC для Ada, илиGNAT),
- ALGOL 68[11] (начиная с версии 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[12]).
- D (GCC для D, или GDC[13], начиная с версии 9.1[14])
- Модула-2 (GCC для Модула-2, или gm2[15], начиная с версии 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[7].
Также существуют сторонние front-end’ы дляPascal,Modula-3,Mercury,VHDL иPL/I.
Архитектуры
[править |править код]Список поддерживаемых GCC (для версии 7.1) процессоров включает в себя
Менее известные процессоры, поддерживаемые в стандартном релизе:
Дополнительные типы архитектур и процессоров, которые поддерживаются версиями GCC, но поддержкой которых занимаются сторонние организации (не Фонд свободного программного обеспечения):
- D10V
- MeP
- MicroBlaze
- TI MSP430
- TI C6X[16]
- Nios II иNios
- PDP-10
- TIGCC (вариация Motorola 68000)
- Z8000
- PIC24/dsPIC
- OpenRISC 1000
Структура
[править |править код]Внешний интерфейс GCC является стандартом для компиляторов на платформе UNIX. Пользователь вызывает управляющую программу, которая называетсяgcc. Она интерпретирует аргументы командной строки, определяет и запускает для каждого входного файла свои компиляторы нужного языка, запускает, если необходимо,ассемблер икомпоновщик.
Компилятор каждого языка является отдельной программой, которая получаетисходный текст и порождает вывод наязыке ассемблера. Все компиляторы имеют общую внутреннюю структуру: front-end, который производитсинтаксический разбор и порождаетабстрактное синтаксическое дерево, и back end, который конвертирует дерево вRegister Transfer Language[англ.] (RTL), выполняет различные оптимизации, затем порождает программу на языке ассемблера, используя архитектурно-зависимоесопоставление с образцом.
До версии 4.7.2 GCC был почти полностью написан наСи, хотя значительная часть front-end’а для Ады написана наАде. С 14 августа 2012 года разработка была переведена на язык C++[17], версия 4.8[18] и более поздние требуют для своей сборки наличия компилятора C++, поддерживающего C++ 2003.
Отладка программ, скомпилированных с помощью GCC
[править |править код]Главным инструментом для отладки программ, скомпилированных с помощью GCC, являетсяGNU Debugger (gdb). Существуют также узкоспециализированные средства для отладки:
- Valgrind для поиска утечек памяти
- GNU Profiler (gprof[англ.]) используется для того, чтобы определить, сколько времени уходит на выполнение той или иной части программы, как часто вызываются те или иные процедуры; для использования gprof необходимо компилировать программу со специальными опциями для включения «профилирования».
- gcov для анализапокрытия кода.
Лицензия
[править |править код]GCC версии 4.2.1 стал последним релизом, выпущенным подGNU General Public License версии 2. Все последующие версии лицензируются поGPL версии 3[19].
Критика
[править |править код]Некоторые разработчикиOpenBSD, напримерТео де Раадт иОтто Мурбек (Otto Moerbeek), критикуютGCC, называя его «громоздким, глючным, медленным и генерирующим плохой код»[20]. По причине такого критического отношения, а также из-за довольно ограничивающей (по сравнению с BSD) лицензии GPL, под которой выпущена коллекция компиляторов, была предпринята попытка заменить вNetBSD иOpenBSD GCC другими компиляторами, например,PCC[21]. Аналогичная работа по замене GCC наClang ведётся воFreeBSD[22].
См. также
[править |править код]- MinGW
- Portable C Compiler (PCC)
- Sun Studio
- LLVM
- Open Watcom
- Cygwin
- Библиотека libJIT
- Amsterdam Compiler Kit
Примечания
[править |править код]- ↑https://www.gnu.org/software/gcc/releases.html
- ↑Biener R.GCC 15.2 Released (англ.) — 2025.
- ↑Biener R.GCC 14.3 Released (англ.) — 2025.
- ↑Jelínek J.GCC 13.4 Released (англ.) — 2025.
- ↑Installing GCC - GNU Project - Free Software Foundation (FSF)
- ↑Installing GCC - GNU Project - Free Software Foundation (FSF)
- ↑12GCC 7 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) . gcc.gnu.org. Дата обращения: 31 августа 2019. Архивировано 2 сентября 2020 года.
- ↑Stallman, Richard M. GNU Status // GNU's Bulletin. — Free Software Foundation, 1986. — Февраль (т. 1,№ 1). Архивировано 21 августа 2007 года.
- ↑Tower, Leonard (1987) «GNU C compiler beta test release,Архивная копия от 5 ноября 2011 наWayback Machine»comp.lang.misc USENET newsgroup; see alsohttp://gcc.gnu.org/releases.html#timelineАрхивная копия от 28 декабря 2006 наWayback Machine
- ↑Stallman, Richard M. (2001) «Contributors to GCC,Архивная копия от 3 января 2007 наWayback Machine» inUsing and Porting the GNU Compiler Collection (GCC)Архивная копия от 27 декабря 2006 наWayback Machine for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
- ↑Michael Larabel[вд]. GCC Steering Committee Allows New Language Front-End To Land For GCC 16 (англ.). Phoronix. Phoronix Media (22 ноября 2025). Дата обращения: 27 ноября 2025.
- ↑GCC 4.6 Release Series — Changes, New Features, and Fixes — GNU Project — Free Software Foundation (FSF) . Дата обращения: 23 января 2011. Архивировано 4 ноября 2015 года.
- ↑GDC - D Programming Language for GCC . gdcproject.org. Дата обращения: 31 августа 2019. Архивировано 6 августа 2019 года.
- ↑GCC 9 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) . gcc.gnu.org. Дата обращения: 31 августа 2019. Архивировано 19 февраля 2022 года.
- ↑Источник . Дата обращения: 19 февраля 2024. Архивировано 19 декабря 2022 года.
- ↑http://gcc.gnu.org/Архивная копия от 11 января 2012 наWayback Machine "TI C6X processor support [2011-07-15] A port for the TI C6X family of processors "
- ↑C++ Conversion. This project is a continuation of the build GCC in C++ project.Архивная копия от 14 октября 2012 наWayback Machine / GCC wiki, 2012 (англ.)
- ↑GCC 4.8 Release SeriesАрхивная копия от 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. "
- ↑Tools: GCC 4.2.1 Released — KernelTrap (англ.). kerneltrap.org (21 июля 2007). Дата обращения: 25 декабря 2009. Архивировано 17 февраля 2012 года.
- ↑More on OpenBSD’s new compiler — MamboАрхивировано 29 сентября 2008 года.
- ↑Towards a BSD-licensed Compiler . Дата обращения: 3 ноября 2008. Архивировано изоригинала 24 октября 2008 года.
- ↑FreeBSD Status Reports January — March, 2009 . Дата обращения: 19 апреля 2010. Архивировано 17 апреля 2010 года.
Литература
[править |править код]- Артур Гриффитс. GCC. Настольная книга пользователей, программистов и системных администраторов. — Диасофт, 2004. — С. 624. —ISBN 966-7992-34-9.
Ссылки
[править |править код]- Официальный сайтGCC.
- Building and Testing gcc/glibc cross toolchains.
- From Source to Binary: The Inner Workings ofGCC. Overview and explanation of gcc’s internal structure in Red Hat Magazine.
- Dev-C++ — интегрированная среда, включающая в себя компиляторMinGW.
- Code::Blocks — ещё одна интегрированная среда разработки + компилятор MinGW.
- Производительность компиляторов C++.
- Программное обеспечение по алфавиту
- Программное обеспечение, разработанное в 1987 году
- Компиляторы Си
- Компиляторы C++
- Компиляторы Objective-C
- Компиляторы Фортрана
- Программное обеспечение проекта GNU
- Кроссплатформенное программное обеспечение
- Программное обеспечение для Linux
- Программное обеспечение для Windows
- Программное обеспечение для macOS
- Программное обеспечение для OpenSolaris
- Программное обеспечение для Solaris
- Программное обеспечение для Haiku
- Свободные компиляторы и интерпретаторы
- Программное обеспечение с лицензией GNU GPL
- GNU
- Компиляторы Модулы-2