GNU Compiler Collection
GNU Compiler Collection | |
---|---|
Тип | компилятор |
Разработчик | Проект GNU |
Написана на | C++ и Си |
Операционные системы | GNU/Linux[5] и BSD[d][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, Фортран, Ada, Go, GAS и D.
С версии 4.2.2 GCC перешёл на лицензию GPLv3.
Обзор[править | править код]
Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си Леонардом Тауэром и Ричардом Столлманом[7] и выпущен в 1987 году[8] как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software Foundation[9].
В настоящее время 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[10]),
- Objective-C (GCC для Objective-C, или gobjc),
- Objective-C++ (GCC для Objective-C++, или gobjc++),
- Go (GCC для Go, или gccgo) (с версии 4.6[11]).
- D (GCC для D, или GDC[12], начиная с версии 9.1[13])
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, но поддержкой которых занимаются сторонние организации (не Фонд свободного программного обеспечения):
- D10V
- MeP
- MicroBlaze
- TI MSP430
- TI C6X[14]
- 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++[15], версия 4.8[16] и более поздние требуют для своей сборки наличия компилятора 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[17].
Критика[править | править код]
Некоторые разработчики OpenBSD, например Тео де Раадт и Отто Мурбек (Otto Moerbeek), критикуют GCC, называя его «громоздким, глючным, медленным и генерирующим плохой код»[18]. По причине такого критического отношения, а также из-за довольно ограничивающей (по сравнению с BSD) лицензии GPL, под которой выпущена коллекция компиляторов, была предпринята попытка заменить в NetBSD и OpenBSD GCC другими компиляторами, например, PCC[19]. Аналогичная работа по замене GCC на Clang ведётся во FreeBSD[20].
См. также[править | править код]
- 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 13.2 Released — 2023.
- ↑ Biener R. GCC 12.3 Released (англ.) — 2023.
- ↑ Jelínek J. GCC 11.4 Released (англ.) — 2023.
- ↑ Installing GCC - GNU Project - Free Software Foundation (FSF)
- ↑ Installing GCC - GNU Project - Free Software Foundation (FSF)
- ↑ Stallman, Richard M. GNU Status (неопр.) // GNU's Bulletin. — Free Software Foundation, 1986. — February (т. 1, № 1). Архивировано 21 августа 2007 года.
- ↑ Tower, Leonard (1987) «GNU C compiler beta test release, Архивная копия от 5 ноября 2011 на Wayback Machine» comp.lang.misc USENET newsgroup; see also http://gcc.gnu.org/releases.html#timeline Архивная копия от 28 декабря 2006 на Wayback Machine
- ↑ Stallman, Richard M. (2001) «Contributors to GCC, Архивная копия от 3 января 2007 на Wayback Machine» in Using and Porting the GNU Compiler Collection (GCC) Архивная копия от 27 декабря 2006 на Wayback Machine for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
- ↑ GCC 7 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) . gcc.gnu.org. Дата обращения: 31 августа 2019. Архивировано 2 сентября 2020 года.
- ↑ 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 года.
- ↑ 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 of GCC. Overview and explanation of gcc’s internal structure in Red Hat Magazine.
- Dev-C++ — интегрированная среда, включающая в себя компилятор MinGW.
- Code::Blocks — ещё одна интегрированная среда разработки + компилятор MinGW.
- Производительность компиляторов C++.
- Программное обеспечение по алфавиту
- Программное обеспечение, разработанное в 1987 году
- Компиляторы Си
- Компиляторы C++
- Компиляторы Фортрана
- Программное обеспечение проекта GNU
- Кроссплатформенное программное обеспечение
- Программное обеспечение для Linux
- Программное обеспечение для Windows
- Программное обеспечение для macOS
- Программное обеспечение для OpenSolaris
- Программное обеспечение для Solaris
- Программное обеспечение для Haiku
- Свободные компиляторы и интерпретаторы
- Программное обеспечение с лицензией GNU GPL
- GNU