Коллекция компиляторов GNU
Оригинальный автор(ы) | Ричард Столлман |
---|---|
Разработчик(и) | Проект GNU |
Первоначальный выпуск | 22 марта 1987 г [ 1 ] |
Стабильная версия | 14.2 [ 2 ]
/ 1 августа 2024 г. |
Репозиторий | |
Написано в | С , С++ [ 3 ] |
Операционная система | Кросс-платформенный |
Платформа | GNU и многие другие |
Размер | ~15 миллионов локов [ 4 ] |
Доступно в | Английский |
Тип | Компилятор |
Лицензия | GPLv3+ с исключением библиотеки времени выполнения GCC [ 5 ] |
Веб-сайт | GCC |
Коллекция компиляторов GNU ( GCC ) представляет собой набор компиляторов проекта GNU , которые поддерживают различные языки программирования , аппаратные архитектуры и операционные системы . Фонд свободного программного обеспечения (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 чипы на .
Помимо того, что GCC является официальным компилятором операционной системы GNU , он был принят в качестве стандартного компилятора многими другими современными Unix-подобными компьютерными операционными системами , включая большинство Linux дистрибутивов . Большинство операционных систем семейства BSD также перешли на GCC вскоре после его выпуска, хотя с тех пор FreeBSD и 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 отделяла свои инструменты разработки от своей операционной системы , продавая их отдельно по более высокой совокупной цене, чем предыдущий пакет, который заставило многих пользователей Sun покупать или загружать GCC вместо инструментов поставщика. [ 21 ] Хотя Столлман считал GNU Emacs своим основным проектом, к 1990 году GCC поддерживал тринадцать компьютерных архитектур, превосходил по производительности компиляторы нескольких поставщиков и использовался в коммерческих целях несколькими компаниями. [ 22 ]
вилка EGCS
[ редактировать ]Поскольку GCC лицензировался под лицензией GPL, программисты, желающие работать в других направлениях — особенно те, кто пишет интерфейсы для языков, отличных от C, — могли свободно разрабатывать свою собственную версию компилятора при условии, что они соответствуют условиям GPL, включая ее требования по распространению исходного кода. код . Однако многочисленные вилки оказались неэффективными и громоздкими, а трудности с принятием работы официальным проектом GCC сильно расстраивали многих, поскольку в проекте предпочтение отдавалось стабильности новым функциям. [ 23 ] FSF настолько внимательно контролировал то, что было добавлено к официальной версии GCC 2.x (разрабатываемой с 1992 года), что GCC использовался как один из примеров «соборной» модели развития в Эрика С. Рэймонда эссе «Собор и Базар .
В 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 интерфейс Фортрана был 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 ] Сотовый SPE PlayStation 3, [ 36 ] и Дримкаст . [ 37 ] Он был портирован на большее количество процессоров и операционных систем, чем любой другой компилятор. [ 38 ] [ самостоятельно опубликованный источник? ] [ нужен лучший источник ]
Поддерживаемые языки
[ редактировать ]Начиная с версии 13.1, [update] GCC включает в себя интерфейсы для C ( gcc
), С++ ( g++
), Objective-C и Objective-C++ , Fortran ( gfortran
), Ада ( GNAT ), Го ( gccgo
), Д ( gdc
, начиная с 9.1), [ 39 ] [ 40 ] и Модуль-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
), Модуль-3 и VHDL ( GHDL
). [ 43 ] Существует несколько экспериментальных веток для поддержки дополнительных языков, таких как компилятор GCC UPC для Unified Parallel C. [ 47 ] или Руст . [ 48 ] [ 49 ] [ 50 ] [ нужен лучший источник ]
Дизайн
[ редактировать ]Внешний интерфейс GCC соответствует соглашениям Unix . Пользователи вызывают программу-драйвер, специфичную для конкретного языка ( gcc
для С, 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 ]
Передние части
[ редактировать ]Каждый внешний интерфейс использует синтаксический анализатор для создания абстрактного синтаксического дерева данного исходного файла . Благодаря абстракции синтаксического дерева исходные файлы любого из поддерживаемых языков могут обрабатываться одной и той же серверной частью . GCC начал использовать парсеры LALR, созданные с помощью Bison , но постепенно в 2004 году перешёл на рукописные парсеры рекурсивного спуска для C++. [ 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 ]
Архитектуры
[ редактировать ]Основными поддерживаемыми (и наиболее протестированными) семействами процессоров являются 64- и 32-битные ARM, 64- и 32-битные x86_64 и x86, а также 64-битные PowerPC и SPARC . [ 78 ]
Семейства целевых процессоров GCC начиная с версии 11.1 включают: [ 79 ]
- AArch64
- Альфа
- РУКА
- АВР
- Черноперый
- eBPF
- Богоявление (GCC 4.8)
- Н8/300
- HC12
- ИА-32 ( x86 )
- IA-64 (Интел Итаниум)
- МИПС
- Моторола 68000
- МСП430
- графический процессор NVIDIA
- Нвидиа ПТХ
- ПА-РИСК
- ПДП-11
- PowerPC
- Р8К / М16С / М32С
- РИСК-V
- СПАРК
- СуперХ
- Система/390 / zSeries
- ВАКС
- х86-64
Менее известные целевые процессоры, поддерживаемые в стандартной версии, включают:
Дополнительные процессоры поддерживаются версиями GCC, поддерживаемыми отдельно от версии FSF:
- Кортус АПС3
- АРК
- АВР32
- С166 и С167
- Д10В
- ОТЛИЧНО
- eSi-ОБОГРЕВ
- Шестиугольник [ 80 ]
- РешеткаMico32
- ЛатексMico8
- член парламента
- МикроБлейз
- Моторола 6809
- МСП430
- Архитектура NEC SX [ 81 ]
- Ниос II и Ниос
- OpenRISC
- ПДП-10
- PIC24/дсПИК
- ПИК32
- Пропеллер
- Сатурн (HP48XGCC)
- Система/370
- TIGCC ( m68k ) вариант
- ТМС9900
- Трикор
- Z8000
- ЗПУ
Компилятор Java GCJ может работать как с собственной архитектурой машинного языка, так и виртуальной машины 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 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б «Релизы GCC» . Проект ГНУ. Архивировано из оригинала 4 июня 2023 года . Проверено 24 июля 2020 г.
- ^ Якуб Елинек (1 августа 2024 г.). «Выпущен GCC 14.2» . Проверено 1 августа 2024 г.
- ^ «Соглашения о кодировании GCC — проект GNU» . gcc.gnu.org . Архивировано из оригинала 28 мая 2023 года . Проверено 7 февраля 2022 г.
- ^ Jump up to: а б Виктор Родригес (1 октября 2019 г.). «Передовой набор инструментов (последние функции GCC/GLIBC)» . youtube.com . Фонд Linux. Архивировано из оригинала 7 ноября 2021 года . Проверено 19 января 2021 г.
- ^ «Исключение библиотеки времени выполнения GCC» . Архивировано из оригинала 31 марта 2023 года . Проверено 24 июля 2020 г.
- ^ GCC Rust , Rust GCC, 4 июня 2023, заархивировано из оригинала 6 января 2023 , получено 4 июня 2023
- ^ «Языки программирования, поддерживаемые GCC» . Проект ГНУ. Архивировано из оригинала 18 января 2023 года . Проверено 23 июня 2014 г.
- ^ Jump up to: а б «Серия выпусков GCC 6 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org . Архивировано из оригинала 22 сентября 2016 года . Проверено 19 сентября 2016 г.
- ^ Jump up to: а б «OpenACC — GCC Wiki» . gcc.gnu.org . Архивировано из оригинала 1 апреля 2015 года . Проверено 19 сентября 2016 г.
- ^ «Проект инфраструктуры компилятора LLVM» . llvm.org . Архивировано из оригинала 18 января 2023 года . Проверено 24 сентября 2021 г.
- ^ «Очистка Apple GPLv3» . мета.ath0.com . 5 февраля 2012 года. Архивировано из оригинала 18 января 2023 года . Проверено 12 января 2021 г.
- ^ Линнеманн, Рид (20 июня 2012 г.). «Почему Кланг» . Архивировано из оригинала 18 января 2023 года . Проверено 12 января 2021 г.
- ^ «29 августа 2007 г.: Информационный бюллетень FreeBSD Foundation, 29 августа 2007 г.» . 11 октября 2007 года. Архивировано из оригинала 11 октября 2007 года . Проверено 12 января 2021 г.
- ^ «Установка GCC: двоичные файлы — Проект GNU — Фонд свободного программного обеспечения (FSF)» . gcc.gnu.org . Архивировано из оригинала 5 января 2021 года . Проверено 12 января 2021 г.
- ^ фон Хаген, Уильям (2006). Полное руководство по GCC . Полные руководства (2-е изд.). Апресс. п. ХXVII. ISBN 978-1-4302-0219-6 . Архивировано из оригинала 5 апреля 2024 года . Проверено 25 сентября 2020 г.
Поэтому он написал автору VUCK, спрашивая, может ли GNU его использовать. Очевидно, разработчик VUCK отказался сотрудничать, ответив, что университет бесплатный, а компилятор — нет.
- ^ Jump up to: а б с Столлман, Ричард (20 сентября 2011 г.). «О проекте GNU» . Проект GNU. Архивировано из оригинала 9 августа 2019 года . Проверено 9 октября 2011 г.
- ^ Пьюзо, Джером Э., изд. (февраль 1986 г.). «Зоопарк Гну» . Бюллетень GNU . 1 (1). Фонд свободного программного обеспечения. Архивировано из оригинала 23 июня 2015 года . Проверено 11 августа 2007 г.
- ^ Jump up to: а б с д фон Хаген, Уильям (2006). Полное руководство по GCC . Полные руководства (2-е изд.). Апресс. п. ХXVII. ISBN 978-1-4302-0219-6 . Архивировано из оригинала 5 апреля 2024 года . Проверено 25 сентября 2020 г.
- ^ Ричард М. Столлман (переслано Леонардом Х. Тауэром-младшим) (22 марта 1987 г.). «Выпуск бета-тестирования компилятора GNU C» . новостей : comp.lang.c. Группа Архивировано из оригинала 2 июня 2013 года . Проверено 9 октября 2011 г.
- ^ Столлман, Ричард М. (22 июня 2001 г.) [Впервые опубликовано в 1988 г.], «Соавторы GNU CC» , Использование и портирование коллекции компиляторов GNU (GCC) , Free Software Foundation, Inc., стр. 7, заархивировано из оригинала 18 января 2023 года , получено 18 июня 2015 года .
- ^ Салус, Питер Х. (2005). «Глава 10. СОЛНЦЕ и ГЦК» . Демон, Гну и Пингвин . Гроклав . Архивировано из оригинала 20 июня 2022 года . Проверено 14 сентября 2015 г.
- ^ Гарфинкель, Симсон Л. (6 августа 1990 г.). «Готовьтесь к программному обеспечению GNU» . Компьютерный мир . п. 102.
- ^ Jump up to: а б Хенкель-Уоллес, Дэвид (15 августа 1997 г.), Новый проект компилятора для объединения существующих вилок GCC , заархивировано из оригинала 18 января 2023 г. , получено 25 мая 2012 г.
- ^ «Краткая история развития Персидского залива» . www.softpanorama.org . Архивировано из оригинала 9 ноября 2022 года . Проверено 24 января 2021 г.
- ^ «История — GCC Wiki» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 28 сентября 2020 г.
- ^ «Руководящий комитет GCC — Проект GNU» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 25 июля 2016 г.
- ^ "ПАТЧ] Убрать холод" . gcc.gnu.org . Архивировано из оригинала 20 октября 2016 года . Проверено 29 июля 2010 г.
- ^ «Таблица функций Fortran 2003, поддерживаемых GNU Fortran» . ГНУ . Архивировано из оригинала 18 января 2023 года . Проверено 25 июня 2009 г.
- ^ «Таблица функций Fortran 2008, поддерживаемых GNU Fortran» . ГНУ . Архивировано из оригинала 18 января 2023 года . Проверено 25 июня 2009 г.
- ^ «Серия выпусков GCC 4.8 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org . Архивировано из оригинала 8 декабря 2015 года . Проверено 17 февраля 2015 г.
- ^ «Серия выпусков GCC 5 — изменения, новые функции и исправления» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 13 января 2022 г.
- ^ «Серия выпусков GCC 8 — изменения, новые функции и исправления» . gcc.gnu.org . Архивировано из оригинала 29 ноября 2018 года . Проверено 13 января 2022 г.
- ^ «Проект улучшения Symbian GCC» . Архивировано из оригинала 1 августа 2014 года . Проверено 8 ноября 2007 г.
- ^ «Пакеты поддержки плат Linux» . Архивировано из оригинала 7 июня 2011 года . Проверено 24 января 2021 г.
- ^ «Настройка gcc в качестве кросс-компилятора» . ps2штуки . 8 июня 2002 года. Архивировано из оригинала 11 декабря 2008 года . Проверено 12 декабря 2008 г.
- ^ «CompileFarm — GCC Wiki» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 19 сентября 2016 г.
- ^ «Руководство по sh4 g++» . Архивировано из оригинала 20 декабря 2002 года . Проверено 12 декабря 2008 г.
- ^ «Информационный проект Linux» . ЛИНФО. Архивировано из оригинала 3 января 2023 года . Проверено 27 апреля 2010 г.
GCC был портирован (т. е. модифицирован для работы) на более чем 60 платформ, что больше, чем у любого другого компилятора.
- ^ «Серия выпусков GCC 9 — изменения, новые функции и исправления — проект GNU» . Архивировано из оригинала 19 февраля 2022 года . Проверено 7 мая 2019 г.
- ^ «Внешняя часть языка D наконец-то объединена с GCC 9 — Phoronix» . phoronix.com . Архивировано из оригинала 17 мая 2022 года . Проверено 19 января 2021 г.
- ^ «Серия выпусков GCC 13 — изменения, новые функции и исправления — проект GNU» . Архивировано из оригинала 26 мая 2023 года . Проверено 23 июня 2023 г.
- ^ Провен, Лиам (16 декабря 2022 г.). «GCC 13 для поддержки Модулы-2: продолжение Паскаля продолжает существовать в форме FOSS» . Архивировано из оригинала 19 декабря 2022 года . Проверено 19 декабря 2022 г.
- ^ Jump up to: а б «Внешние интерфейсы GCC» . gnu.org. Архивировано из оригинала 18 января 2023 года . Проверено 25 ноября 2011 г.
- ^ «Серия выпусков GCC 5 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 23 апреля 2015 г.
- ^ «Серия выпусков GCC 7» . gnu.org. Архивировано из оригинала 2 сентября 2020 года . Проверено 20 марта 2018 г.
- ^ «Поддержка стандартов C++ в GCC» . Архивировано из оригинала 20 апреля 2022 года . Проверено 17 мая 2021 г.
- ^ «GCC UPC (GCC Unified Parallel C)» . Intrepid Technology, Inc., 20 февраля 2006 г. Архивировано из оригинала 11 февраля 2010 г. . Проверено 11 марта 2009 г.
- ^ «Фронтенд GCC для Rust» . Архивировано из оригинала 10 января 2023 года . Проверено 6 января 2023 г.
- ^ «Фронтенд GCC для Rust (Github)» . Гитхаб . 5 января 2023 года. Архивировано из оригинала 6 января 2023 года . Проверено 6 января 2023 г.
- ^ Шпенглер, Брэд (12 января 2021 г.). «Open Source Security, Inc. объявляет о финансировании клиентской части GCC для Rust» . Архивировано из оригинала 25 апреля 2021 года.
- ^ «Функции безопасности: проверки буфера времени компиляции (FORTIFY_SOURCE)» . Fedoraproject.org. Архивировано из оригинала 7 января 2007 года . Проверено 11 марта 2009 г.
- ^ «языки, используемые для создания GCC» . Архивировано из оригинала 27 мая 2008 года . Проверено 14 сентября 2008 г.
- ^ «Внутреннее устройство GCC» . GCC.org. Архивировано из оригинала 18 января 2023 года . Проверено 1 марта 2010 г.
- ^ «Предпосылки для проекта GCC — GNU» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 5 сентября 2021 г.
- ^ «GCC в некоторой степени допускает использование C++» . Х. 1 июня 2010 г. Архивировано из оригинала 26 сентября 2022 г. Проверено 9 июня 2010 г.
- ^ «Re: Усилия по привлечению большего количества пользователей?» . lists.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 24 сентября 2021 г.
- ^ «Серия выпусков GCC 4.8: изменения, новые функции и исправления» . Архивировано из оригинала 8 декабря 2015 года . Проверено 4 октября 2013 г.
- ^ «bootstrap: требование обновления до C++11» . Гитхаб . Архивировано из оригинала 29 сентября 2022 года . Проверено 18 мая 2020 г.
- ^ «Серия выпусков GCC 3.4 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 25 июля 2016 г.
- ^ «Серия выпусков GCC 4.1 — изменения, новые функции и исправления — проект GNU» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 25 июля 2016 г.
- ^ «GENERIC (Внутреннее устройство коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 25 июля 2016 г.
- ^ «GIMPLE (Внутреннее устройство коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 25 июля 2016 г.
- ^ «МакКэт» . Архивировано из оригинала 12 августа 2004 года . Проверено 14 сентября 2017 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ «Домашняя страница Лори Хендрен» . www.sable.mcgill.ca . Архивировано из оригинала 27 сентября 2022 года . Проверено 20 июля 2009 г.
- ^ Новилло, Диего (декабрь 2004 г.). «От исходного кода к двоичному: внутренняя работа GCC» . Журнал «Красная шляпа» . Архивировано из оригинала 1 апреля 2009 года.
- ^ «Установка GCC: Сборка — проект GNU» . gcc.gnu.org . Архивировано из оригинала 22 августа 2023 года . Проверено 25 июля 2016 г.
- ^ «Библиотека GNU C++» . Проект ГНУ. Архивировано из оригинала 25 декабря 2022 года . Проверено 21 февраля 2021 г.
- ^ «Лицензия» . Проект ГНУ. Архивировано из оригинала 18 января 2023 года . Проверено 21 февраля 2021 г.
- ^ «Плагины» . Онлайн-документация GCC . Архивировано из оригинала 30 апреля 2013 года . Проверено 8 июля 2013 г.
- ^ Старинкевич, Базиль. «Плагины GCC на примере MELT» (PDF) . Архивировано (PDF) из оригинала 13 апреля 2014 г. Проверено 10 апреля 2014 г.
- ^ «О ССЗ МЭЛТ» . Архивировано из оригинала 4 июля 2013 года . Проверено 8 июля 2013 г.
- ^ «GCC отключен [LWN.net]» . lwn.net . Архивировано из оригинала 9 ноября 2020 года . Проверено 28 марта 2021 г.
- ^ «Транзакционная память — GCC Wiki» . gcc.gnu.org . Архивировано из оригинала 19 августа 2016 года . Проверено 19 сентября 2016 г.
- ^ «Льюис Хаятт — [ИСПРАВЛЕНИЕ] wwwdocs: поддержка документов для расширенных идентификаторов, добавленных в GCC» . gcc.gnu.org . Архивировано из оригинала 27 марта 2020 года . Проверено 27 марта 2020 г.
- ^ «Рекомендации по символам расширенного идентификатора для C и C++» . www.open-std.org . Архивировано из оригинала 30 сентября 2020 года . Проверено 27 марта 2020 г.
- ^ «Расширения C (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано из оригинала 12 января 2022 года . Проверено 12 января 2022 г.
- ^ «Typeof — Использование коллекции компиляторов GNU (GCC)» . gcc.gnu.org . Архивировано из оригинала 13 января 2022 года . Проверено 12 января 2022 г.
- ^ «Критерии выпуска GCC 12» . gcc.gnu.org . 26 октября 2022 года. Архивировано из оригинала 27 января 2023 года . Проверено 27 января 2023 г.
- ^ «Сводка параметров (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано из оригинала 18 января 2023 года . Проверено 21 августа 2020 г.
- ^ «Проект Шестиугольник Вики» . Архивировано из оригинала 23 марта 2012 года . Проверено 19 мая 2011 г.
- ^ «Архив кода Google — долгосрочное хранилище для хостинга проектов Google Code» . code.google.com . Архивировано из оригинала 25 сентября 2022 года . Проверено 24 сентября 2021 г.
- ^ «Компилятор GNU для языка программирования Java» . Архивировано из оригинала 9 мая 2007 года . Проверено 22 апреля 2010 г.
- ^ графические калькуляторы # программирование
- ^ «Использование коллекции компиляторов GNU» . gnu.org . Архивировано из оригинала 16 ноября 2023 года . Проверено 5 ноября 2019 г.
- ^ «Исключение времени выполнения GCC» . ФСФ. Архивировано из оригинала 16 апреля 2014 года . Проверено 10 апреля 2014 г.
Дальнейшее чтение
[ редактировать ]- Использование коллекции компиляторов GNU (GCC) , Фонд свободного программного обеспечения, 2008.
- Внутреннее устройство коллекции компиляторов GNU (GCC) , Фонд свободного программного обеспечения, 2008.
- Введение в GCC , Network Theory Ltd., 2004 г. (пересмотрено в августе 2005 г.). ISBN 0-9541617-9-3 .
- Артур Гриффит, GCC: Полный справочник . Макгроу Хилл / Осборн, 2002. ISBN 0-07-222405-3 .
Внешние ссылки
[ редактировать ]Официальный
[ редактировать ]Другой
[ редактировать ]- Коллекция документов по архитектуре и внутреннему устройству GCC 4.0.2 в IIT Bombay
- Кернер, Шон Майкл (2 марта 2006 г.). «Новый GCC Heavy по оптимизации» . www.internetnews.com
- Кернер, Шон Майкл (22 апреля 2005 г.). «GCC 4.0 с открытым исходным кодом: старше, быстрее» . интернетньюс.com. Архивировано из оригинала 17 сентября 2006 года . Проверено 21 октября 2006 г.
- От исходного кода к двоичному: внутренняя работа GCC , Диего Новилло, Red Hat Magazine , декабрь 2004 г.
- Статья 2003 года о GENERIC и GIMPLE.
- Marketing Cygnus Support , эссе, посвященное развитию GCC в 1990-е годы, с 30 ежемесячными отчетами в разделе «Внутри Cygnus Engineering» ближе к концу.
- Анонс EGCS 1.0
- Список возможностей EGCS 1.0
- Fear of Forking , эссе Рика Моэна, в котором записано семь известных форков, включая GCC/EGCS.
- программное обеспечение 1987 года
- Компиляторы C (языка программирования)
- Компиляторы С++
- Составители
- Кроссплатформенное бесплатное программное обеспечение
- Компиляторы Фортрана
- Бесплатные компиляторы и интерпретаторы
- Программное обеспечение проекта GNU
- Инструменты разработки Java
- Компиляторы Паскаля (языка программирования)
- Программное обеспечение, переписанное на C++.
- Бесплатное программное обеспечение, написанное на C++.
- Программное обеспечение, использующее лицензию GPL
- Инструменты программирования Unix