stringtranslate.com

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

GNU Compiler Collection ( GCC ) — это коллекция компиляторов из проекта GNU , которые поддерживают различные языки программирования , аппаратные архитектуры и операционные системы . Free Software Foundation (FSF) распространяет GCC как свободное программное обеспечение под лицензией GNU General Public License (GNU GPL). GCC является ключевым компонентом цепочки инструментов GNU , которая используется для большинства проектов, связанных с GNU и ядром Linux . Имея примерно 15 миллионов строк кода в 2019 году, GCC является одной из крупнейших свободных программ из существующих. [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 и Apple macOS перешли на компилятор Clang , [10] в основном из-за лицензионных соображений. [11] [12] [13] GCC также может компилировать код для Windows , Android , iOS , Solaris , HP-UX , AIX и DOS . [14]

История

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

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

вилка EGCS

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

В 1997 году группа разработчиков сформировала Experimental/Enhanced GNU Compiler System (EGCS) для объединения нескольких экспериментальных форков в один проект. [23] [18] Основой слияния стал снимок разработки GCC (сделанный около 2.7.2 и позже продолженный до релиза 2.8.1). Слияния включали g77 (Fortran), PGCC ( P5 Pentium -оптимизированный GCC), [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 следует 3-этапной архитектуре, типичной для многоязыковых и многопроцессорных компиляторов . Все программные деревья преобразуются в общее абстрактное представление на «среднем конце», что позволяет использовать возможности оптимизации кода и генерации двоичного кода для всех языков.

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

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

Они, при необходимости, преобразуются в представление ввода среднего конца, называемое формой GENERIC ; затем средний конец постепенно преобразует программу в ее окончательную форму. Оптимизации компилятора и методы статического анализа кода (такие как 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 могли использовать деструкторы и функции generics из 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

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]
Идентификаторы Unicode
Хотя язык C++ требует поддержки не-ASCII символов Unicode в идентификаторах , эта функция поддерживается только с 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:

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

Лицензия

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

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

Ссылки

  1. ^ ab "GCC Releases". Проект GNU. Архивировано из оригинала 4 июня 2023 г. Получено 24 июля 2020 г.
  2. Якуб Елинек (1 августа 2024 г.). «Выпущен GCC 14.2» . Проверено 1 августа 2024 г.
  3. ^ "GCC Coding Conventions - GNU Project". gcc.gnu.org . Архивировано из оригинала 28 мая 2023 г. Получено 7 февраля 2022 г.
  4. ^ ab Víctor Rodríguez (1 октября 2019 г.). "Cutting Edge Toolchain (Latest Features in GCC/GLIBC)". youtube.com . Linux Foundation. Архивировано из оригинала 7 ноября 2021 г. . Получено 19 января 2021 г. .
  5. ^ "GCC Runtime Library Exception". Архивировано из оригинала 31 марта 2023 г. Получено 24 июля 2020 г.
  6. ^ GCC Rust, Rust GCC, 4 июня 2023 г., заархивировано из оригинала 6 января 2023 г. , извлечено 4 июня 2023 г.
  7. ^ "Языки программирования, поддерживаемые GCC". Проект GNU. Архивировано из оригинала 18 января 2023 г. Получено 23 июня 2014 г.
  8. ^ ab "GCC 6 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org . Архивировано из оригинала 22 сентября 2016 г. Получено 19 сентября 2016 г.
  9. ^ ab "OpenACC - GCC Wiki". gcc.gnu.org . Архивировано из оригинала 1 апреля 2015 г. Получено 19 сентября 2016 г.
  10. ^ "The LLVM Compiler Infrastructure Project". llvm.org . Архивировано из оригинала 18 января 2023 г. . Получено 24 сентября 2021 г. .
  11. ^ "Apple's GPLv3 purge". meta.ath0.com . 5 февраля 2012 г. Архивировано из оригинала 18 января 2023 г. Получено 12 января 2021 г.
  12. ^ Линнеманн, Рид (20 июня 2012 г.). «Почему Clang». Архивировано из оригинала 18 января 2023 г. Получено 12 января 2021 г.
  13. ^ "29 августа 2007 г.: Информационный бюллетень FreeBSD Foundation, 29 августа 2007 г.". 11 октября 2007 г. Архивировано из оригинала 11 октября 2007 г. Получено 12 января 2021 г.
  14. ^ "Установка GCC: Двоичные файлы - Проект GNU - Фонд свободного программного обеспечения (FSF)". gcc.gnu.org . Архивировано из оригинала 5 января 2021 г. . Получено 12 января 2021 г. .
  15. ^ фон Хаген, Уильям (2006). Полное руководство по GCC. Definitive Guides (2-е изд.). Apress. стр. XXVII. ISBN 978-1-4302-0219-6. Архивировано из оригинала 5 апреля 2024 г. . Получено 25 сентября 2020 г. . Поэтому он написал автору VUCK, спрашивая, может ли GNU использовать его. Очевидно, разработчик VUCK отказался сотрудничать, ответив, что университет был свободен, но компилятор — нет.
  16. ^ abc Столлман, Ричард (20 сентября 2011 г.). «О проекте GNU». Проект GNU. Архивировано из оригинала 9 августа 2019 г. . Получено 9 октября 2011 г. .
  17. ^ Puzo, Jerome E., ed. (февраль 1986). "Gnu's Zoo". GNU's Bulletin . 1 (1). Free Software Foundation. Архивировано из оригинала 23 июня 2015 г. Получено 11 августа 2007 г.
  18. ^ abcd фон Хаген, Уильям (2006). Полное руководство по GCC. Definitive Guides (2-е изд.). Apress. стр. XXVII. ISBN 978-1-4302-0219-6. Архивировано из оригинала 5 апреля 2024 г. . Получено 25 сентября 2020 г. .
  19. Ричард М. Столлман (переслал Леонард Х. Тауэр-младший) (22 марта 1987 г.). "GNU C compiler beta test release". Группа новостей : comp.lang.c. Архивировано из оригинала 2 июня 2013 г. Получено 9 октября 2011 г.
  20. Столлман, Ричард М. (22 июня 2001 г.) [Впервые опубликовано в 1988 г.], «Участники GNU CC», Использование и портирование коллекции компиляторов GNU (GCC) , Free Software Foundation, Inc., стр. 7, заархивировано из оригинала 18 января 2023 г. , извлечено 18 июня 2015 г.
  21. ^ Salus, Peter H. (2005). "Глава 10. SUN и gcc". Демон, Гну и Пингвин . Groklaw . Архивировано из оригинала 20 июня 2022 г. Получено 14 сентября 2015 г.
  22. ^ Гарфинкель, Симсон Л. (6 августа 1990 г.). «Приготовьтесь к программному обеспечению GNU». Computerworld . стр. 102.
  23. ^ ab Хенкель-Уоллес, Дэвид (15 августа 1997 г.), Новый проект компилятора для объединения существующих форков GCC, заархивировано из оригинала 18 января 2023 г. , извлечено 25 мая 2012 г. .
  24. ^ "Краткая история разработки GCC". www.softpanorama.org . Архивировано из оригинала 9 ноября 2022 г. Получено 24 января 2021 г.
  25. ^ "История - GCC Wiki". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 28 сентября 2020 г. .
  26. ^ "GCC steering committee - GNU Project". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 25 июля 2016 г. .
  27. ^ "PATCH] Remove chill". gcc.gnu.org . Архивировано из оригинала 20 октября 2016 г. Получено 29 июля 2010 г.
  28. ^ "Chart of Fortran 2003 Features supported by GNU Fortran". GNU . Архивировано из оригинала 18 января 2023 г. Получено 25 июня 2009 г.
  29. ^ "Chart of Fortran 2008 Features supported by GNU Fortran". GNU . Архивировано из оригинала 18 января 2023 г. Получено 25 июня 2009 г.
  30. ^ "GCC 4.8 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org . Архивировано из оригинала 8 декабря 2015 г. . Получено 17 февраля 2015 г. .
  31. ^ "GCC 5 Release Series — Changes, New Features, and Fixes". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 13 января 2022 г. .
  32. ^ "GCC 8 Release Series — Changes, New Features, and Fixes". gcc.gnu.org . Архивировано из оригинала 29 ноября 2018 г. . Получено 13 января 2022 г. .
  33. ^ "Symbian GCC Improvement Project". Архивировано из оригинала 1 августа 2014 г. Получено 8 ноября 2007 г.
  34. ^ "Linux Board Support Packages". Архивировано из оригинала 7 июня 2011 г. Получено 24 января 2021 г.
  35. ^ "настройка gcc как кросс-компилятора". ps2stuff . 8 июня 2002 г. Архивировано из оригинала 11 декабря 2008 г. Получено 12 декабря 2008 г.
  36. ^ "CompileFarm - GCC Wiki". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 19 сентября 2016 г. .
  37. ^ "sh4 g++ guide". Архивировано из оригинала 20 декабря 2002 г. Получено 12 декабря 2008 г.
  38. ^ "Linux Information Project". LINFO. Архивировано из оригинала 3 января 2023 г. Получено 27 апреля 2010 г. GCC был портирован (т. е. модифицирован для работы) на более чем 60 платформах, что больше, чем для любого другого компилятора.
  39. ^ "GCC 9 Release Series — Changes, New Features, and Fixes - GNU Project". Архивировано из оригинала 19 февраля 2022 г. Получено 7 мая 2019 г.
  40. ^ "D Language Front-End окончательно влился в GCC 9 - Phoronix". phoronix.com . Архивировано из оригинала 17 мая 2022 г. . Получено 19 января 2021 г. .
  41. ^ "GCC 13 Release Series — Changes, New Features, and Fixes - GNU Project". Архивировано из оригинала 26 мая 2023 г. Получено 23 июня 2023 г.
  42. ^ Proven, Liam (16 декабря 2022 г.). "GCC 13 для поддержки Modula-2: продолжение Pascal живет в форме FOSS". Архивировано из оригинала 19 декабря 2022 г. . Получено 19 декабря 2022 г. .
  43. ^ ab "GCC Front Ends". gnu.org. Архивировано из оригинала 18 января 2023 г. Получено 25 ноября 2011 г.
  44. ^ "GCC 5 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 23 апреля 2015 г. .
  45. ^ "GCC 7 Release Series". gnu.org. Архивировано из оригинала 2 сентября 2020 г. Получено 20 марта 2018 г.
  46. ^ "Поддержка стандартов C++ в GCC". Архивировано из оригинала 20 апреля 2022 г. Получено 17 мая 2021 г.
  47. ^ "GCC UPC (GCC Unified Parallel C)". Intrepid Technology, Inc. 20 февраля 2006 г. Архивировано из оригинала 11 февраля 2010 г. Получено 11 марта 2009 г.
  48. ^ "GCC Front-End For Rust". Архивировано из оригинала 10 января 2023 г. Получено 6 января 2023 г.
  49. ^ "GCC Front-End for Rust (Github)". GitHub . 5 января 2023 г. Архивировано из оригинала 6 января 2023 г. Получено 6 января 2023 г.
  50. ^ Шпенглер, Брэд (12 января 2021 г.). «Open Source Security, Inc. объявляет о финансировании GCC Front-End для Rust». Архивировано из оригинала 25 апреля 2021 г.
  51. ^ "Функции безопасности: проверки буфера во время компиляции (FORTIFY_SOURCE)". fedoraproject.org. Архивировано из оригинала 7 января 2007 г. Получено 11 марта 2009 г.
  52. ^ "языки, используемые для создания GCC". Архивировано из оригинала 27 мая 2008 г. Получено 14 сентября 2008 г.
  53. ^ "GCC Internals". GCC.org. Архивировано из оригинала 18 января 2023 г. Получено 1 марта 2010 г.
  54. ^ "Предварительные условия для GCC - GNU Project". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 5 сентября 2021 г. .
  55. ^ "GCC допускает C++ – в некоторой степени". The H . 1 июня 2010 г. Архивировано из оригинала 26 сентября 2022 г. Получено 9 июня 2010 г.
  56. ^ "Re: Усилия по привлечению большего числа пользователей?". lists.gnu.org . Архивировано из оригинала 18 января 2023 г. Получено 24 сентября 2021 г.
  57. ^ "GCC 4.8 Release Series: Changes, New Features, and Fixes". Архивировано из оригинала 8 декабря 2015 г. Получено 4 октября 2013 г.
  58. ^ "bootstrap: Update requirement to C++11". GitHub . Архивировано из оригинала 29 сентября 2022 г. Получено 18 мая 2020 г.
  59. ^ "GCC 3.4 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 25 июля 2016 г. .
  60. ^ "GCC 4.1 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 25 июля 2016 г. .
  61. ^ "GENERIC (GNU Compiler Collection (GCC) Internals)". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 25 июля 2016 г. .
  62. ^ "GIMPLE (GNU Compiler Collection (GCC) Internals)". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 25 июля 2016 г. .
  63. ^ "McCAT". Архивировано из оригинала 12 августа 2004 г. Получено 14 сентября 2017 г.{{cite web}}: CS1 maint: бот: исходный статус URL неизвестен ( ссылка )
  64. ^ "Домашняя страница Лори Хендрен". www.sable.mcgill.ca . Архивировано из оригинала 27 сентября 2022 г. Получено 20 июля 2009 г.
  65. ^ Novillo, Diego (декабрь 2004 г.). "From Source to Binary: The Inner Works of GCC". Red Hat Magazine . Архивировано из оригинала 1 апреля 2009 г.
  66. ^ "Установка GCC: Сборка - Проект GNU". gcc.gnu.org . Архивировано из оригинала 22 августа 2023 г. Получено 25 июля 2016 г.
  67. ^ "Библиотека GNU C++". Проект GNU. Архивировано из оригинала 25 декабря 2022 г. Получено 21 февраля 2021 г.
  68. ^ "Лицензия". Проект GNU. Архивировано из оригинала 18 января 2023 г. Получено 21 февраля 2021 г.
  69. ^ "Плагины". Онлайн-документация GCC . Архивировано из оригинала 30 апреля 2013 г. Получено 8 июля 2013 г.
  70. ^ Старынкевич, Базиль. "GCC plugins thru the MELT example" (PDF) . Архивировано (PDF) из оригинала 13 апреля 2014 г. . Получено 10 апреля 2014 г. .
  71. ^ "About GCC MELT". Архивировано из оригинала 4 июля 2013 г. Получено 8 июля 2013 г.
  72. ^ "GCC unplugged [LWN.net]". lwn.net . Архивировано из оригинала 9 ноября 2020 г. . Получено 28 марта 2021 г. .
  73. ^ "TransactionalMemory - GCC Wiki". gcc.gnu.org . Архивировано из оригинала 19 августа 2016 г. Получено 19 сентября 2016 г.
  74. ^ "Lewis Hyatt - [PATCH] wwwdocs: Поддержка документов для расширенных идентификаторов добавлена ​​в GCC". gcc.gnu.org . Архивировано из оригинала 27 марта 2020 г. . Получено 27 марта 2020 г. .
  75. ^ "Рекомендации по расширенным идентификаторам символов для C и C++". www.open-std.org . Архивировано из оригинала 30 сентября 2020 г. . Получено 27 марта 2020 г. .
  76. ^ "C Extensions (Using the GNU Compiler Collection (GCC))". gcc.gnu.org . Архивировано из оригинала 12 января 2022 г. . Получено 12 января 2022 г. .
  77. ^ "Typeof - Использование коллекции компиляторов GNU (GCC)". gcc.gnu.org . Архивировано из оригинала 13 января 2022 г. . Получено 12 января 2022 г. .
  78. ^ "GCC 12 Release Criteria". gcc.gnu.org . 26 октября 2022 г. Архивировано из оригинала 27 января 2023 г. Получено 27 января 2023 г.
  79. ^ "Option Summary (Using the GNU Compiler Collection (GCC))". gcc.gnu.org . Архивировано из оригинала 18 января 2023 г. . Получено 21 августа 2020 г. .
  80. ^ "Hexagon Project Wiki". Архивировано из оригинала 23 марта 2012 г. Получено 19 мая 2011 г.
  81. ^ "Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code". code.google.com . Архивировано из оригинала 25 сентября 2022 г. . Получено 24 сентября 2021 г. .
  82. ^ "Компилятор GNU для языка программирования Java". Архивировано из оригинала 9 мая 2007 г. Получено 22 апреля 2010 г.
  83. ^ графические калькуляторы#программирование
  84. ^ "Использование коллекции компиляторов GNU". gnu.org . Архивировано из оригинала 16 ноября 2023 г. . Получено 5 ноября 2019 г. .
  85. ^ "GCC Runtime Exception". FSF. Архивировано из оригинала 16 апреля 2014 г. Получено 10 апреля 2014 г.

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

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

Официально

Другой