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.


1. Огляд

Початок GCC було покладено Річардом Столлманом, який реалізував перший варіант GCC в 1985 на нестандартному і непереносимість діалекті мови Паскаль; пізніше компілятор був переписаний на мові Сі Леонардом Тауером ( англ. Leonard H. Tower Jr. ) І Річардом Столлманом [1] і випущений в 1987 [2] як компілятор для проекту GNU, який сам по собі був вільним програмним забезпеченням. Розробка GCC курується Free Software Foundation. [3]

В даний час GCC підтримується групою програмістів з усього світу. GCC є лідером за кількістю процесорів і операційних систем, які він підтримує.

Будучи офіційним компілятором системи GNU, GCC також є головним компілятором для збірки ряду інших операційних систем, серед них: різні варіанти Linux і BSD, а також ReactOS, Mac OS X, OpenSolaris, NeXTSTEP, BeOS та Haiku.

GCC часто вибирається для розробки програмного забезпечення, яке повинне працювати на великому числі різних апаратних платформ. Відмінності між "рідними" для кожної з апаратних платформ компіляторами призводять до труднощів при розробці коду, який би коректно компілювався різними компіляторами, а крім того, при використанні різних компіляторів сильно ускладнюються складальні скрипти, які повинні збирати ПО для всіх апаратних платформ. При використанні GCC для компіляції коду під різні платформи буде використаний один і той же синтаксичний аналізатор. Тому якщо вдалося зібрати програму для однієї з цільових платформ, то велика вірогідність, що програма нормально збереться і для інших платформ.


2. Мови

У версії 4.1.1 (випущеної 24 травня 2006), стандартний компілятор включав в себе front-end'и для:

  • Ada (GCC для Ada, або GNAT)
  • Сі
  • C + + (C + + для GCC, або G+ +)
  • Фортран (GCC для Fortran, або gfortran)
  • Java (GCC для Java, або GCJ)
  • Objective-C (GCC для Objective-C, або gobjc)
  • Objective-C + + (GCC для Objective-C + +, або gobjc + +)
  • Go (GCC для Go, або gccgo) (з версії 4.6 [4])

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.


3. Архітектури

Список підтримуваних GCC (для версії 4.3) процесорів включає в себе:

Менш відомі процесори, підтримувані в стандартному релізі:

  • 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, але підтримкою яких займаються сторонні організації (не Фондом вільного програмного забезпечення):


4. Структура

Зовнішній інтерфейс GCC є стандартом для компіляторів на платформі UNIX. Користувач викликає керуючу програму, яка називається gcc. Вона інтерпретує аргументи командного рядка, визначає і запускає для кожного вхідного файлу свої компілятори потрібної мови, запускає, якщо необхідно, асемблер і компонувальник.

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

До версії 4.7.2 GCC був майже повністю написаний на Сі, хоча значна частина front-end для Ади написана на Ада. З версії 2012-08-14 розробка переведена на мову C + +.


5. Налагодження програм, скомпільованих за допомогою GCC

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

  • Valgrind для пошуку витоків пам'яті
  • GNU Profiler (gprof (англ.)) використовується для того, щоб визначити, скільки часу йде на виконання тієї чи іншої частини програми, як часто викликаються ті або інші процедури; для використання gprof необхідно компілювати програму зі спеціальними опціями для включення "профілювання".
  • gcov для аналізу покриття

6. Ліцензія

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

7. Критика

Деякі розробники OpenBSD, наприклад, Тео де Раадт і Отто Мурбек (Otto Moerbeek), критикують GCC, називаючи його "громіздким, глючний, повільним і генеруючим поганий код". [7] По причині такого критичного ставлення, а також через досить обмежує (в порівнянні з BSD) ліцензії GPL, під якою випущена колекція компіляторів, була зроблена спроба замінити в NetBSD і OpenBSD GCC іншими компіляторами, наприклад, PCC [8]. Аналогічна робота по заміні GCC на Clang ведеться в FreeBSD [9].


Примітки

  1. Stallman, Richard M. (February 1986). " GNU Status - web.cecs.pdx.edu / ~ trent/gnu/bull/01/bull01.txt ". GNU's Bulletin (Free Software Foundation) 1 (1). Перевірено 2006-09-26.
  2. Tower, Leonard (1987) " ​​GNU C compiler beta test release, - groups.google.com/group/comp.lang.misc/msg/32eda22392c20f98 "comp.lang.misc USENET newsgroup; See Also http://gcc.gnu .org / releases.html # timeline - gcc.gnu.org / releases.html # timeline
  3. Stallman, Richard M. (2001) " Contributors to GCC, - gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_23.html # SEC260 "In Using AND Porting The GNU Compiler Collection (GCC) - gcc.gnu.org / onlinedocs / gcc -2.95.3/gcc.html # SEC_Top for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
  4. GCC 4.6 Release Series - Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) - gcc.gnu.org/gcc-4.6/changes.html # go
  5. http://gcc.gnu.org/ - gcc.gnu.org / "TI C6X processor support [2011-07-15] A port for the TI C6X family of processors"
  6. Tools: GCC 4.2.1 Released - KernelTrap - kerneltrap.org/node/13975 (Англ.) . kerneltrap.org (21 липня 2007). Читальний - www.webcitation.org/65WTYZB0e з першоджерела 17 лютого 2012.
  7. More on OpenBSD's new compiler - Mambo - www.thejemreport.com/content/view/369/
  8. Towards a BSD-licensed Compiler - it.toolbox.com/blogs/bsd-guru/towards-a-bsdlicensed-compiler-19289
  9. FreeBSD Status Reports January - March, 2009 - lists.freebsd.org/pipermail/freebsd-stable/2009-May/049873.html

Література

  • Артур Гріффітс GCC. Настільна книга користувачів, програмістів і системних адміністраторів. - Діасофт, 2004. - С. 624. - ISBN 966-7992-34-9