28.02.2021

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, Go, GAS и D.

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

Обзор

Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си Леонардом Тауэром и Ричардом Столлманом и выпущен в 1987 году как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software Foundation.

В настоящее время 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),
  • Objective-C (GCC для Objective-C, или gobjc),
  • Objective-C++ (GCC для Objective-C++, или gobjc++),
  • Go (GCC для Go, или gccgo) (с версии 4.6).
  • D (GCC для D, или GDC, начиная с версии 9.1)

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) процессоров включает в себя

  • 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 C6X
  • 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++, версия 4.8 и более поздние требуют для своей сборки наличия C++ компилятора, поддерживающего С++ 2003.

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

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

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

Лицензия

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

Критика

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


Похожие новости:

Автоматическое распараллеливание

Автоматическое распараллеливание
Автоматическое распараллеливание — оптимизация программы компилятором, состоящая в автоматическом её преобразовании в форму, работающую на параллельном компьютере, например, на SMP или NUMA машине.

Nim

Nim
Nim (ранее — Nimrod) — язык программирования со статической типизацией, поддерживающий процедурный, объектно-ориентированный, функциональный и обобщённый стили программирования. По утверждению

QBasic

QBasic
QBasic — диалект языка программирования Бейсик (BASIC), разработанный компанией Microsoft, а также среда разработки, позволяющая писать, запускать и отлаживать программы на этом языке. QBasic удобен

Intel C++ compiler

Intel C++ compiler
Intel C++ Compiler — оптимизирующий компилятор, разрабатываемый фирмой Intel для процессоров семейств x86, x86-64 и IA-64. Главным достоинством компилятора являются выполняемые им высокоуровневые, а
Комментариев пока еще нет. Вы можете стать первым!

Добавить комментарий!

Ваше Имя:
Ваш E-Mail:
Введите два слова, показанных на изображении: *
Популярные новости
Декоративная штукатурка
Декоративная штукатурка
Основой интерьера обычно становится отделка стен. Качество ее должно быть высокое. Желаемое...
Купить ПЭТ оптом
Купить ПЭТ оптом
Полиэтилентерефталат представляет собой распространенный полиэфир и производится под разными...
Виды тепловых пунктов
Виды тепловых пунктов
Тепловые пункты – высокотехнологичное оборудование, с помощью которого во внутренние системы от...
Все новости