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.
С версии 4.2.2 GCC перешёл на лицензию GPLv3.
Обзор
Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си Леонардом Тауэром (англ. Leonard H. Tower Jr.) и Ричардом Столлманом, [1] и выпущен в 1987[2] как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software Foundation.[3]
В настоящее время GCC поддерживается группой программистов со всего мира. GCC является лидером по количеству процессоров и операционных систем, которые он поддерживает.
Будучи официальным компилятором системы GNU, включая варианты системы, построенные на ядре Linux (GNU/Linux), GCC также является главным компилятором для сборки ряда других операционных систем, среди них: различные варианты BSD, ReactOS, Mac OS X, NeXTSTEP и BeOS.
GCC часто выбирается для разработки программного обеспечения, которое должно работать на большом числе различных аппаратных платформ. Различия между «родными» для каждой из аппаратных платформ компиляторами приводят к трудностям при разработке кода, который бы корректно компилировался разными компиляторами, а кроме того, при использовании различных компиляторов сильно усложняются сборочные скрипты, которые должны собирать ПО для всех аппаратных платформ. При использовании GCC для компиляции кода под разные платформы будет использован один и тот же синтаксический анализатор. Поэтому если удалось собрать программу для одной из целевых платформ, то велика вероятность, что программа нормально соберётся и для других платформ.
Языки
В версии 4.1.1 (выпущенной 24 мая 2006), стандартный компилятор включал в себя front-end’ы для:
- Ada (GCC для Ada aka GNAT)
- Си
- C++ (C++ для GCC aka G++)
- Фортран (GCC для Fortran aka gfortran)
- Java (GCC для Java aka GCJ)
- Objective-C
Front end для CHILL был добавлен ранее, но из-за недостаточной поддержки был исключён из набора. До релиза версии 4.0 front-end’ом для Fortran был G77, который поддерживал лишь FORTRAN 77. В новых версиях G77 был исключён в пользу нового GFortran frontend который поддерживает Fortran 95.
Так же существуют front-end’ы для Pascal, D, Модула-2, Modula-3, Mercury, VHDL и PL/I.
Архитектуры
Список поддерживаемых GCC (для версии 4.3) процессоров включает в себя:
- Alpha
- ARM
- Atmel AVR
- Blackfin
- HC12
- H8/300
- IA-32 (x86 и x86-64)
- IA-64, в том числе и «Itanium»
- m68k
- Motorola 88000
- MIPS
- Texas Instruments MSP430 (поддерживается только версия GCC 3.2.3)
- PA-RISC
- PDP-11
- PowerPC
- 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
- MSP430
- Nios II и Nios
- PDP-10
- TIGCC (вариация Motorola 68000)
- Z8000
- PIC24/dsPIC
Структура
Внешний интерфейс GCC является стандартом для компиляторов на платформе UNIX. Пользователь вызывает управляющую программу, которая называется gcc. Она интерпретирует аргументы командной строки, определяет и запускает для каждого входного файла свои компиляторы нужного языка, запускает, если необходимо, ассемблер и компоновщик.
Компилятор каждого языка является отдельной программой, которая получает исходный текст и порождает вывод на языке ассемблера. Все компиляторы имеют общую внутреннюю структуру: front end, который производит синтаксический разбор и порождает абстрактное синтаксическое дерево, и back end, который конвертирует дерево в Register Transfer Language (RTL), выполняет различные оптимизации, затем порождает программу на языке ассемблера, используя архитектурно-зависимое сопоставление с образцом.
GCC почти полностью написан на Си, хотя значительная часть front-end для Ады написана на Ада.
Отладка программ, скомпилированных с помощью GCC
Главным инструментом для отладки программ, скомпилированных с помощью GCC, является GNU Debugger (gdb). Существуют также узкоспециализированные средства для отладки:
- Valgrind для поиска утечек памяти
- GNU Profiler (gprof) используется для того, чтобы определить, сколько времени уходит на выполнение той или иной части программы, как часто вызываются те или иные процедуры; для использования gprof необходимо компилировать программу со специальными опциями для включения «профилирования».
- gcov для анализа покрытия
Лицензия
GCC версии 4.2.1 стал последним релизом, выпущенным под GNU General Public License версии 2. Все последующие версии лицензируются по GPL версии 3.[4]
Критика
Некоторые разработчики OpenBSD, например Тэо де Раадт и Отто Мёрбек (Otto Moerbeek), критикуют GCC, называя его «громоздким, глючным, медленным, и генерирующим плохой код.»[5] По причине такого критического отношения, а также из-за довольно ограничивающей (по сравнению с BSD) лицензии GPL, под которой выпущена коллекция компиляторов, была предпринята попытка заменить в NetBSD и OpenBSD коллекцию GCC другими компиляторами, например PCC.[6]
Примечания
- ↑ Stallman, Richard M. (February 1986). "GNU Status". GNU's Bulletin 1 (1). Проверено 2006-09-26.
- ↑ Tower, Leonard (1987) «GNU C compiler beta test release,» comp.lang.misc USENET newsgroup; see also http://gcc.gnu.org/releases.html#timeline
- ↑ 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)
- ↑ Tools: GCC 4.2.1 Released — KernelTrap (англ.). kerneltrap.org (21 июля 2007). Проверено 25 декабря 2009.
- ↑ http://www.thejemreport.com/content/view/369/
- ↑ http://it.toolbox.com/blogs/bsd-guru/towards-a-bsdlicensed-compiler-19289
Литература
- Артур Гриффитс GCC. Настольная книга пользователей, программистов и системных администраторов. — Диасофт, 2004. — С. 624. — ISBN 966-7992-34-9
См. также
В Википедии есть портал «Свободное программное обеспечение» |
- MinGW,
- Portable C Compiler,
- LLVM,
- Open Watcom,
- Cygwin.
- Библиотека libJIT для компиляции на лету libJIT от Риза Везерли, Клауса Трейчела, Алексея Демакова и Кирилла Кононенко
- Amsterdam Compiler Kit
Ссылки
- Домашняя страница GCC
- Руководство по GCC версии 4.1
- Руководство по GCC версии 4.0
- Руководство по GCC версии 3.4.6
- Building and Testing gcc/glibc cross toolchains
- GCC Wiki
- GCC Forum — hosted by Nabble archiving all gcc mailing lists into a searchable forum.
- From Source to Binary: The Inner Workings of GCC Overview and explanation of gcc’s internal structure in Red Hat Magazine
- GCC for MVS 3.8, MVS/XA, OS/390 (z/OS)
- Dev-C++ — интегрированная среда, включающая в себя компилятор MinGW
- Code::Blocks — ещё одна интегрированная среда разработки + компилятор MinGW
- Производительность компиляторов C++
- Сравнительный анализ компиляторов GCC и Sun Studio на примере SPEC CPU 2006
- online-C++ Онлайн компилятор.
- PCC Portable C Compiler
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....