stringtranslate.com

Коллекция компиляторов GNU

Коллекция компиляторов GNU ( GCC ) — это оптимизирующий компилятор , созданный проектом GNU Project , поддерживающий различные языки программирования , аппаратные архитектуры и операционные системы . Фонд свободного программного обеспечения (FSF) распространяет GCC как бесплатное программное обеспечение под лицензией GNU General Public License (GNU GPL). GCC — ключевой компонент инструментальной цепочки GNU и стандартный компилятор для большинства проектов, связанных с GNU и ядром Linux . GCC, насчитывающая примерно 15 миллионов строк кода в 2019 году, является одной из крупнейших существующих бесплатных программ. [4] Оно сыграло важную роль в развитии свободного программного обеспечения как инструмент и пример.

Когда он был впервые выпущен в 1987 году Ричардом Столлманом , GCC 1.0 назывался компилятором GNU C , поскольку он работал только с языком программирования C. [1] В декабре того же года он был расширен для компиляции C++ . Позднее интерфейсы были разработаны для Objective-C , Objective-C++ , Fortran , Ada , D , Go и Rust , [6] среди других. [ 7] Спецификации OpenMP и OpenACC также поддерживаются компиляторами C и C++. [8] [9]

GCC портирован на большее количество платформ и архитектур набора команд , чем любой другой компилятор, и широко используется в качестве инструмента при разработке как свободного, так и несвободного программного обеспечения . GCC также доступен для многих встроенных систем , включая чипы на базе ARM и Power ISA .

Будучи официальным компилятором операционной системы GNU , GCC был принят в качестве стандартного компилятора многими другими современными Unix-подобными компьютерными операционными системами , включая большинство дистрибутивов Linux . Большинство операционных систем семейства BSD также перешли на GCC вскоре после его выпуска, хотя с тех пор FreeBSD , OpenBSD и Apple macOS перешли на компилятор Clang [10] во многом по причинам лицензирования. [11] [12] [13] GCC также может компилировать код для Windows , Android , iOS , Solaris , HP-UX , AIX и DOS . [14]

История

В конце 1983 года, пытаясь запустить операционную систему GNU , Ричард Столлман попросил Эндрю С. Таненбаума , автора Амстердамского компилятора (также известного как Free University Compiler Kit ), получить разрешение на использование этого программного обеспечения для GNU. Когда Таненбаум сообщил ему, что компилятор не является бесплатным и что бесплатным является только университет, Столлман решил работать над другим компилятором. [15] Его первоначальный план состоял в том, чтобы переписать существующий компилятор из Ливерморской национальной лаборатории Лоуренса с Pastel на C с некоторой помощью Лена Тауэра и других. [16] [17] Столлман написал новый интерфейс C для ливерморского компилятора, но затем понял, что для этого требуются мегабайты стекового пространства, что невозможно в системе Unix 68000 с размером всего 64 КБ, и пришел к выводу, что ему придется написать новый компилятор с нуля. [16] Ни один из кодов компилятора Pastel не попал в GCC, хотя Столлман действительно использовал написанный им интерфейс C. [16] [18]

GCC был впервые выпущен 22 марта 1987 года и доступен по FTP от MIT . [19] Столлман был указан в качестве автора, но процитировал других за их вклад, в том числе Тауэра за «части синтаксического анализатора, генератора RTL, определений RTL и описания машины Vax», Джека Дэвидсона и Кристофера В. Фрейзера за идею использование RTL в качестве промежуточного языка и Пола Рубина для написания большей части препроцессора. [20] Описанный Питером Х. Салусом как «первый хит свободного программного обеспечения» , компилятор GNU появился как раз в то время, когда Sun Microsystems отделяла свои инструменты разработки от своей операционной системы , продавая их отдельно по более высокой совокупной цене, чем предыдущий. Bundle, из-за чего многие пользователи Sun покупали или загружали GCC вместо инструментов этого поставщика. [21] Хотя Столлман считал GNU Emacs своим основным проектом, к 1990 году GCC поддерживал тринадцать компьютерных архитектур, превосходил по производительности компиляторы нескольких поставщиков и использовался в коммерческих целях несколькими компаниями. [22]

вилка EGCS

Поскольку GCC лицензировался под лицензией GPL, программисты, желающие работать в других направлениях — особенно те, кто писал интерфейсы для языков, отличных от C, — могли свободно разрабатывать свою собственную вилку компилятора при условии, что они соответствуют условиям GPL, включая ее требования по распространению исходного кода . код . Однако многочисленные форки оказались неэффективными и громоздкими, а трудности с принятием работы официальным проектом GCC сильно расстраивали многих, поскольку в проекте предпочтение отдавалось стабильности новым функциям. [23] FSF настолько тщательно контролировал то, что было добавлено к официальной версии GCC 2.x (разрабатываемой с 1992 года), что GCC использовался как один из примеров «соборной» модели разработки в эссе Эрика С. Рэймонда « The Собор и базар .

В 1997 году группа разработчиков сформировала Экспериментальную/расширенную систему компиляторов GNU (EGCS) , чтобы объединить несколько экспериментальных версий в один проект. [23] [18] Основой слияния стал снимок разработки GCC (сделанный примерно в версии 2.7.2, а затем до версии 2.8.1). Слияния включали g77 (Fortran), PGCC ( GCC, оптимизированный для P5 Pentium ), [18] множество улучшений C++, а также множество новых архитектур и вариантов операционных систем . [24]

Хотя оба проекта внимательно следили за изменениями друг друга, разработка EGCS оказалась значительно более энергичной, настолько, что FSF официально остановил разработку своего компилятора GCC 2.x, благословил EGCS как официальную версию GCC и назначил проект EGCS GCC. сопровождающие в апреле 1999 года. С выпуском GCC 2.95 в июле 1999 года два проекта снова были объединены. [25] [18] С тех пор GCC поддерживается разнообразной группой программистов со всего мира под руководством руководящего комитета. [26]

В GCC 3 (2002 г.) удален интерфейс для CHILL из-за отсутствия обслуживания. [27]

До версии 4.0 интерфейсом Fortran был g77, который поддерживал только FORTRAN 77 , но позже от него отказались в пользу нового интерфейса GNU Fortran , который поддерживает Fortran 95 , а также большую часть Fortran 2003 и Fortran 2008 . [28] [29]

Начиная с версии 4.8, GCC реализован на C++. [30]

Поддержка Cilk Plus существовала с GCC 5 по GCC 7. [31] [32]

GCC был портирован на самые разные архитектуры наборов команд и широко используется в качестве инструмента при разработке как свободного, так и несвободного программного обеспечения . GCC также доступен для многих встроенных систем , включая Symbian (называемый gcce ), [33] чипы на базе ARM и Power ISA . [34] Компилятор может работать с широким спектром платформ, включая игровые консоли , такие как PlayStation 2 , [35] Cell SPE для PlayStation 3, [36] и Dreamcast . [37] Он был портирован на большее количество процессоров и операционных систем, чем любой другой компилятор. [38] [ собственный источник? ] [ нужен лучший источник ]

Поддерживаемые языки

Начиная с версии 13.1, GCC включает интерфейсы для C ( gcc), C++ ( g++), Objective-C и Objective-C++ , Fortran ( gfortran), Ada ( GNAT ), Go ( gccgo), D ( gdc, начиная с версии 9.1), [39] [40] и Modula-2 ( gm2, начиная с версии 13.1) [41] [42] языки программирования, [43] с расширениями параллельного языка OpenMP и OpenACC , поддерживаемыми начиная с GCC 5.1. [9] [44] Версии до GCC 7 также поддерживали Java ( gcj), позволяя компилировать Java в собственный машинный код. [45]

Что касается поддержки языковых версий для C++ и C, начиная с GCC 11.1 целью по умолчанию является gnu++17 , расширенный набор C++17 , и gnu11 , расширенный набор C11 , также доступна строгая стандартная поддержка. GCC также предоставляет экспериментальную поддержку C++20 и C++23 . [46]

Сторонние интерфейсы существуют для многих языков, таких как Pascal ( gpc), Modula-3 и VHDL ( GHDL). [43] Существует несколько экспериментальных веток для поддержки дополнительных языков, таких как компилятор GCC UPC для Unified Parallel C [47] или Rust . [48] ​​[49] [50] [ нужен лучший источник ]

Дизайн

Обзор расширенного конвейера компиляции GCC, включая специализированные программы, такие как препроцессор , ассемблер и компоновщик .
GCC следует трехэтапной архитектуре, типичной для многоязыковых и многопроцессорных компиляторов . Все деревья программ преобразуются в общее абстрактное представление на «середине», что позволяет использовать средства оптимизации кода и генерации двоичного кода во всех языках.

Внешний интерфейс GCC соответствует соглашениям Unix . Пользователи вызывают программу-драйвер для конкретного языка ( gccдля C, g++для C++ и т. д.), которая интерпретирует аргументы команды , вызывает фактический компилятор, запускает ассемблер на выходе, а затем, при необходимости, запускает компоновщик для создания полного исполняемого двоичного файла.

Каждый из компиляторов языка представляет собой отдельную программу, считывающую исходный код и выдающую машинный код . Все они имеют общую внутреннюю структуру. Интерфейсная часть для каждого языка анализирует исходный код на этом языке и создает абстрактное синтаксическое дерево («дерево» для краткости).

При необходимости они преобразуются во входное представление промежуточного конца, называемое ОБЩЕЙ формой; затем средний конец постепенно преобразует программу к ее окончательной форме. К коду применяются оптимизации компилятора и методы статического анализа кода (такие как FORTIFY_SOURCE, [51] директива компилятора, которая пытается обнаружить некоторые случаи переполнения буфера ). Они работают с несколькими представлениями, в основном с независимым от архитектуры представлением GIMPLE и зависящим от архитектуры представлением RTL . Наконец, машинный код создается с использованием сопоставления шаблонов с учетом особенностей архитектуры , первоначально основанного на алгоритме Джека Дэвидсона и Криса Фрейзера.

GCC был написан в основном на C , за исключением частей интерфейса Ada . В дистрибутив входят стандартные библиотеки для Ada и C++ , код которых в основном написан на этих языках. [52] [ нужно обновить ] На некоторых платформах в дистрибутив также входит низкоуровневая библиотека времени выполнения libgcc , написанная на комбинации машинно-независимого C и машинного кода , специфичного для процессора , предназначенная в первую очередь для обработки арифметических операций, выполняемых целевым процессором. не может действовать напрямую. [53]

GCC использует в своей сборке множество дополнительных инструментов, многие из которых по умолчанию установлены во многих дистрибутивах Unix и Linux (но обычно отсутствуют в установках Windows), включая Perl , [ необходимо дальнейшее объяснение ] Flex , Bison и другие распространенные инструменты. Кроме того, в настоящее время для сборки требуется наличие трех дополнительных библиотек: GMP , MPC и MPFR . [54]

В мае 2010 года руководящий комитет GCC решил разрешить использование компилятора C++ для компиляции GCC. [55] Компилятор должен был быть написан в основном на языке C плюс некоторые возможности C++. В частности, это было решено для того, чтобы разработчики GCC могли использовать деструкторы и обобщенные функции C++. [56]

В августе 2012 года руководящий комитет GCC объявил, что GCC теперь использует C++ в качестве языка реализации. [57] Это означает, что для сборки GCC из исходных кодов требуется компилятор C++, который понимает стандарт ISO/IEC C++03 .

18 мая 2020 года GCC перешел от стандарта ISO/IEC C++03 к стандарту ISO/IEC C++11 (т.е. необходим для компиляции, начальной загрузки самого компилятора; однако по умолчанию он компилирует более поздние версии C++). [58]

Передние части

Интерфейсы состоят из предварительной обработки , лексического анализа , синтаксического анализа (парсинга) и семантического анализа. Целями внешнего интерфейса компилятора являются принятие или отклонение программ-кандидатов в соответствии с грамматикой и семантикой языка, выявление ошибок и обработка допустимых представлений программы на последующих этапах компилятора. В этом примере показаны шаги лексера и синтаксического анализатора, выполняемые для простой программы, написанной на C.

Каждый внешний интерфейс использует синтаксический анализатор для создания абстрактного синтаксического дерева данного исходного файла . Благодаря абстракции синтаксического дерева исходные файлы любого из поддерживаемых языков могут обрабатываться одной и той же серверной частью . GCC начал использовать парсеры LALR , созданные с помощью Bison , но постепенно перешёл на рукописные парсеры рекурсивного спуска для C++ в 2004 году, [59] и для C и Objective-C в 2006 году. [60] По состоянию на 2021 год все внешние интерфейсы используют ручной -написанные парсеры с рекурсивным спуском.

До GCC 4.0 древовидное представление программы не было полностью независимым от целевого процессора. Значение дерева несколько различалось для разных языковых интерфейсов, и внешние интерфейсы могли предоставлять свои собственные древовидные коды. Это было упрощено с появлением GENERIC и GIMPLE, двух новых форм языково-независимых деревьев, которые были представлены с появлением GCC 4.0. GENERIC более сложен и основан на промежуточном представлении интерфейса Java GCC 3.x. GIMPLE — это упрощенный GENERIC, в котором различные конструкции опускаются до нескольких инструкций GIMPLE. Интерфейсы C , C++ и Java создают GENERIC непосредственно во интерфейсе. Другие интерфейсы вместо этого имеют разные промежуточные представления после анализа и преобразуют их в GENERIC.

В любом случае так называемый «гимплификатор» затем преобразует эту более сложную форму в более простую форму GIMPLE на основе SSA , которая является общим языком для большого количества мощных глобальных (областей функций) оптимизаций, независимых от языка и архитектуры.

ДЖЕНЕРИК и ГИМПЛ

GENERIC — это промежуточный язык представления , используемый в качестве «среднего конца» при компиляции исходного кода в исполняемые двоичные файлы . Подмножество, называемое GIMPLE , предназначено для всех внешних интерфейсов GCC.

Средний этап GCC выполняет весь анализ и оптимизацию кода , работая независимо как от компилируемого языка, так и от целевой архитектуры, начиная с представления GENERIC [61] и расширяя его до языка передачи регистров (RTL). Представление GENERIC содержит только подмножество императивных программных конструкций, оптимизированных средним концом.

При преобразовании исходного кода в GIMPLE [62] сложные выражения разбиваются на трехадресный код с использованием временных переменных . Это представление было вдохновлено представлением SIMPLE, предложенным в компиляторе McCAT [63] Лори Дж. Хендрен [64] для упрощения анализа и оптимизации императивных программ .

Оптимизация

Оптимизация может происходить на любом этапе компиляции; однако основная часть оптимизации выполняется после синтаксического и семантического анализа внешнего интерфейса и перед генерацией кода внутреннего интерфейса; таким образом, общее, хотя и несколько противоречивое, название этой части компилятора — «средний конец».

Точный набор оптимизаций GCC варьируется от выпуска к выпуску по мере его разработки, но включает в себя стандартные алгоритмы, такие как оптимизация цикла , переход к потокам , исключение общих подвыражений , планирование инструкций и т. д. Оптимизации RTL имеют меньшее значение с добавлением глобальных оптимизаций на основе SSA для деревьев GIMPLE [65] , поскольку оптимизации RTL имеют гораздо более ограниченную область применения и содержат меньше информации высокого уровня.

Некоторые из этих оптимизаций, выполняемых на этом уровне, включают устранение мертвого кода , устранение частичной избыточности , глобальную нумерацию значений , разреженное условное распространение констант и скалярную замену агрегатов. Также выполняются оптимизации на основе зависимости массива, такие как автоматическая векторизация и автоматическое распараллеливание . Также возможна оптимизация на основе профиля . [66]

Стандартная библиотека C++ (libstdc++)

Проект GCC включает в себя реализацию стандартной библиотеки C++ под названием libstdc++, [67] лицензированную по лицензии GPLv3, за исключением возможности связывания приложений, не использующих GPL, когда исходные тексты собираются с помощью GCC. [68]

Другие особенности

Некоторые особенности GCC включают в себя:

Оптимизация времени соединения
Оптимизация времени компоновки оптимизирует границы объектного файла, чтобы напрямую улучшить связанный двоичный файл. Оптимизация времени компоновки опирается на промежуточный файл, содержащий сериализацию некоторого представления Gimple , включенного в объектный файл. [ необходима цитация ] Файл создается вместе с объектным файлом во время компиляции исходного кода. Каждая компиляция исходного кода создает отдельный объектный файл и вспомогательный файл времени компоновки. Когда объектные файлы связаны, компилятор запускается снова и использует вспомогательные файлы для оптимизации кода в отдельно скомпилированных объектных файлах.
Плагины
Плагины напрямую расширяют компилятор GCC. [69] Плагины позволяют адаптировать стандартный компилятор к конкретным потребностям с помощью внешнего кода, загружаемого в виде плагинов. Например, плагины могут добавлять, заменять или даже удалять промежуточные проходы, работающие с представлениями Gimple . [70] Уже опубликовано несколько плагинов GCC, в частности:
  • Плагин Python, который связывается с libpython и позволяет вызывать произвольные сценарии Python изнутри компилятора. Цель состоит в том, чтобы позволить плагинам GCC писаться на Python.
  • Плагин MELT предоставляет язык высокого уровня , подобный Lisp , для расширения GCC. [71]
Поддержка плагинов когда-то была спорным вопросом в 2007 году. [72]
Транзакционная память C++
В языке C++ активно предлагается транзакционная память. Его можно включить в GCC 6 и новее при компиляции с использованием -fgnu-tm. [8] [73]
Идентификаторы Юникода
Хотя язык C++ требует поддержки символов Юникода , отличных от ASCII, в идентификаторах , эта функция поддерживается только начиная с GCC 10. Как и в случае с существующей обработкой строковых литералов, предполагается, что исходный файл закодирован в UTF-8 . Эта функция является необязательной в C, но после этого изменения она также стала доступной. [74] [75]
Расширения C
GNU C расширяет язык программирования C несколькими нестандартными функциями, включая вложенные функции [76] и typeofвыражения. [77]

Архитектуры

GCC компилирует Hello World в Windows

Основными поддерживаемыми (и наиболее протестированными) семействами процессоров являются 64- и 32-битные ARM, 64- и 32-битные x86_64 и x86 , а также 64-битные PowerPC и SPARC . [78]

Семейства целевых процессоров GCC начиная с версии 11.1 включают: [79]

Менее известные целевые процессоры, поддерживаемые в стандартной версии, включают:

Дополнительные процессоры поддерживаются версиями GCC, поддерживаемыми отдельно от версии FSF:

Компилятор Java GCJ может работать как с собственной архитектурой машинного языка, так и с байт-кодом Java виртуальной машины Java . [82] При перенацеливании GCC на новую платформу часто используется начальная загрузка . Motorola 68000, Zilog Z80 и другие процессоры также используются в версиях GCC, разработанных для различных программируемых графических калькуляторов Texas Instruments, Hewlett Packard, Sharp и Casio. [83]

Лицензия

GCC лицензируется в соответствии с Генеральной общественной лицензией GNU версии 3. [84] Исключение времени выполнения GCC разрешает компиляцию проприетарных программ (в дополнение к бесплатному программному обеспечению) с помощью GCC. Это не влияет на условия лицензии исходного кода GCC. [85]

Смотрите также

Рекомендации

  1. ^ ab "Релизы GCC". Проект ГНУ . Проверено 24 июля 2020 г.
  2. Ричард Бинер (27 июля 2023 г.). «Выпущен GCC 13.2» . Проверено 27 июля 2023 г.
  3. ^ «Соглашения о кодировании GCC - Проект GNU» . gcc.gnu.org . Проверено 7 февраля 2022 г.
  4. ↑ ab Виктор Родригес (1 октября 2019 г.). «Передовой набор инструментов (последние функции GCC/GLIBC)». youtube.com . Фонд Linux. Архивировано из оригинала 7 ноября 2021 года . Проверено 19 января 2021 г.
  5. ^ «Исключение библиотеки времени выполнения GCC» . Проверено 24 июля 2020 г.
  6. GCC Rust, Rust GCC, 4 июня 2023 г. , получено 4 июня 2023 г.
  7. ^ «Языки программирования, поддерживаемые GCC». Проект ГНУ . Проверено 23 июня 2014 г.
  8. ^ ab «Серия выпусков GCC 6 — изменения, новые функции и исправления — проект GNU». gcc.gnu.org .
  9. ^ ab "OpenACC - GCC Wiki". gcc.gnu.org .
  10. ^ «Проект инфраструктуры компилятора LLVM» . llvm.org .
  11. ^ «Очистка Apple GPLv3» . мета.ath0.com . 5 февраля 2012 года . Проверено 12 января 2021 г.
  12. Линнеманн, Рид (20 июня 2012 г.). «Почему Кланг» . Проверено 12 января 2021 г.
  13. ^ «29 августа 2007 г.: Информационный бюллетень FreeBSD Foundation, 29 августа 2007 г.» . 11 октября 2007 года. Архивировано из оригинала 11 октября 2007 года . Проверено 12 января 2021 г.
  14. ^ «Установка GCC: двоичные файлы - Проект GNU - Фонд свободного программного обеспечения (FSF)» . gcc.gnu.org . Проверено 12 января 2021 г.
  15. ^ фон Хаген, Уильям (2006). Полное руководство по GCC. Полные руководства (2-е изд.). Апресс. п. ХXVII. ISBN 978-1-4302-0219-6. Поэтому он написал автору VUCK, спрашивая, может ли GNU его использовать. Очевидно, разработчик VUCK отказался сотрудничать, ответив, что университет бесплатный, а компилятор — нет.
  16. ↑ abc Столлман, Ричард (20 сентября 2011 г.). «О проекте GNU». Проект GNU . Проверено 9 октября 2011 г.
  17. ^ Пьюзо, Джером Э., изд. (февраль 1986 г.). «Зоопарк Гну». Бюллетень GNU . Фонд свободного программного обеспечения. 1 (1) . Проверено 11 августа 2007 г.
  18. ^ abcd фон Хаген, Уильям (2006). Полное руководство по GCC. Полные руководства (2-е изд.). Апресс. п. ХXVII. ISBN 978-1-4302-0219-6.
  19. Ричард М. Столлман (переслано Леонардом Х. Тауэром-младшим) (22 марта 1987 г.). «Выпуск бета-тестирования компилятора GNU C». Группа новостей : comp.lang.c. Проверено 9 октября 2011 г.
  20. ^ Столлман, Ричард М. (22 июня 2001 г.) [Впервые опубликовано в 1988 г.], «Соавторы GNU CC», Использование и портирование коллекции компиляторов GNU (GCC) , Free Software Foundation, Inc., стр. 7 , получено 18 июня 2015 г.
  21. ^ Салус, Питер Х. (2005). «Глава 10. СОЛНЦЕ и GCC». Демон, Гну и Пингвин . Гроклав .
  22. ^ Гарфинкель, Симсон Л. (6 августа 1990 г.). «Готовьтесь к программному обеспечению GNU». Компьютерный мир . п. 102.
  23. ^ ab Хенкель-Уоллес, Дэвид (15 августа 1997 г.), Новый проект компилятора для объединения существующих вилок GCC , получено 25 мая 2012 г. .
  24. ^ «Краткая история развития GCC». www.softpanorama.org . Проверено 24 января 2021 г.
  25. ^ "История - GCC Wiki" . gcc.gnu.org . Проверено 28 сентября 2020 г.
  26. ^ "Руководящий комитет GCC - Проект GNU" . gcc.gnu.org .
  27. ^ "ПАТЧ] Убрать холод". gcc.gnu.org . Проверено 29 июля 2010 г.
  28. ^ «Таблица функций Fortran 2003, поддерживаемых GNU Fortran» . ГНУ . Проверено 25 июня 2009 г.
  29. ^ «Таблица функций Fortran 2008, поддерживаемых GNU Fortran» . ГНУ . Проверено 25 июня 2009 г.
  30. ^ «Серия выпусков GCC 4.8 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org .
  31. ^ «Серия выпусков GCC 5 — изменения, новые функции и исправления» . gcc.gnu.org .
  32. ^ «Серия выпусков GCC 8 — изменения, новые функции и исправления» . gcc.gnu.org .
  33. ^ «Проект улучшения Symbian GCC» . Проверено 8 ноября 2007 г.
  34. ^ «Пакеты поддержки плат Linux» . Архивировано из оригинала 7 июня 2011 года . Проверено 24 января 2021 г.
  35. ^ «Настройка gcc в качестве кросс-компилятора» . ps2штуки . 8 июня 2002 года. Архивировано из оригинала 11 декабря 2008 года . Проверено 12 декабря 2008 г.
  36. ^ "CompileFarm - GCC Wiki" . gcc.gnu.org .
  37. ^ "Руководство по sh4 g++" . Архивировано из оригинала 20 декабря 2002 года . Проверено 12 декабря 2008 г.
  38. ^ «Информационный проект Linux» . ЛИНФО . Проверено 27 апреля 2010 г. GCC был портирован (т.е. модифицирован для работы) на более чем 60 платформ, что больше, чем у любого другого компилятора.
  39. ^ «Серия выпусков GCC 9 — изменения, новые функции и исправления — проект GNU» .
  40. ^ «Внешняя часть языка D наконец объединена с GCC 9 - Phoronix» . phoronix.com . Проверено 19 января 2021 г.
  41. ^ «Серия выпусков GCC 13 — изменения, новые функции и исправления — проект GNU» .
  42. Доказано, Лиам (16 декабря 2022 г.). «GCC 13 для поддержки Модулы-2: продолжение Паскаля продолжает существовать в форме FOSS» . Проверено 19 декабря 2022 г.
  43. ^ ab "Внешние интерфейсы GCC". gnu.org . Проверено 25 ноября 2011 г.
  44. ^ «Серия выпусков GCC 5 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org .
  45. ^ "Серия выпусков GCC 7" . gnu.org . Проверено 20 марта 2018 г.
  46. ^ «Поддержка стандартов C++ в GCC» . Проверено 17 мая 2021 г.
  47. ^ «GCC UPC (GCC Unified Parallel C)» . Intrepid Technology, Inc., 20 февраля 2006 г. Проверено 11 марта 2009 г.
  48. ^ "Внешний интерфейс GCC для Rust" . Проверено 6 января 2023 г.
  49. ^ «Внешний интерфейс GCC для Rust (Github)» . Гитхаб . 5 января 2023 г. . Проверено 6 января 2023 г.
  50. Шпенглер, Брэд (12 января 2021 г.). «Open Source Security, Inc. объявляет о финансировании клиентской части GCC для Rust».
  51. ^ «Функции безопасности: проверки буфера времени компиляции (FORTIFY_SOURCE)» . Fedoraproject.org . Проверено 11 марта 2009 г.
  52. ^ «Языки, используемые для создания GCC» . Архивировано из оригинала 27 мая 2008 года . Проверено 14 сентября 2008 г.
  53. ^ "Внутреннее устройство GCC" . GCC.org . Проверено 1 марта 2010 г.
  54. ^ «Предпосылки для GCC — проекта GNU» . gcc.gnu.org . Проверено 5 сентября 2021 г.
  55. ^ «GCC в некоторой степени допускает C++» . Х. _ 1 июня 2010 г.
  56. ^ «Re: Усилия по привлечению большего количества пользователей?». lists.gnu.org .
  57. ^ «Серия выпусков GCC 4.8: изменения, новые функции и исправления» . Проверено 4 октября 2013 г.
  58. ^ «Загрузочная загрузка: требование обновления до C++11». Гитхаб . Проверено 18 мая 2020 г.
  59. ^ «Серия выпусков GCC 3.4 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org .
  60. ^ «Серия выпусков GCC 4.1 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org .
  61. ^ «ОБЩИЙ (Внутреннее устройство коллекции компиляторов GNU (GCC))» . gcc.gnu.org .
  62. ^ «GIMPLE (Внутреннее устройство коллекции компиляторов GNU (GCC))» . gcc.gnu.org .
  63. ^ "МакКэт". Архивировано из оригинала 12 августа 2004 года . Проверено 14 сентября 2017 г.{{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  64. ^ "Домашняя страница Лори Хендрен" . www.sable.mcgill.ca .
  65. ^ Новилло, Диего (декабрь 2004 г.). «От исходного кода к двоичному: внутренняя работа GCC». Журнал «Красная шляпа» . Архивировано из оригинала 1 апреля 2009 года.
  66. ^ «Установка GCC: Сборка - Проект GNU» . gcc.gnu.org .
  67. ^ «Библиотека GNU C++». Проект ГНУ . Проверено 21 февраля 2021 г.
  68. ^ «Лицензия». Проект ГНУ . Проверено 21 февраля 2021 г.
  69. ^ «Плагины». Онлайн-документация GCC . Проверено 8 июля 2013 г.
  70. ^ Старинкевич, Базиль. «Плагины GCC на примере MELT» (PDF) . Архивировано (PDF) из оригинала 13 апреля 2014 г. Проверено 10 апреля 2014 г.
  71. ^ «О плавлении GCC». Архивировано из оригинала 4 июля 2013 года . Проверено 8 июля 2013 г.
  72. ^ «GCC отключен [LWN.net]» . lwn.net .
  73. ^ "Транзакционная память - GCC Wiki" . gcc.gnu.org .
  74. ^ «Льюис Хаятт - [ИСПРАВЛЕНИЕ] wwwdocs: поддержка документов для расширенных идентификаторов, добавленных в GCC» . gcc.gnu.org . Проверено 27 марта 2020 г.
  75. ^ «Рекомендации по символам расширенного идентификатора для C и C++». www.open-std.org . Проверено 27 марта 2020 г.
  76. ^ «Расширения C (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Проверено 12 января 2022 г.
  77. ^ «Typeof - Использование коллекции компиляторов GNU (GCC)» . gcc.gnu.org . Проверено 12 января 2022 г.
  78. ^ «Критерии выпуска GCC 12» . gcc.gnu.org . 26 октября 2022 г. . Проверено 27 января 2023 г.
  79. ^ «Сводка параметров (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Проверено 21 августа 2020 г.
  80. ^ "Проект Шестиугольник Wiki" . Архивировано из оригинала 23 марта 2012 года . Проверено 19 мая 2011 г.
  81. ^ «Архив кода Google — долгосрочное хранилище для хостинга проектов Google Code» . code.google.com .
  82. ^ «Компилятор GNU для языка программирования Java». Архивировано из оригинала 9 мая 2007 года . Проверено 22 апреля 2010 г.
  83. ^ графические калькуляторы # программирование
  84. ^ «Использование коллекции компиляторов GNU». gnu.org . Проверено 5 ноября 2019 г.
  85. ^ «Исключение времени выполнения GCC» . ФСФ . Проверено 10 апреля 2014 г.

дальнейшее чтение

Внешние ссылки

Официальный

Другой