Открыть сервис

GNU Compiler Collection

GNU Compiler Collection (сокращённо GCC) — это набор компиляторов для различных языков программирования, разрабатываемый в рамках проекта GNU. GCC является свободным программным обеспечением, распространяемым под лицензией GNU General Public License (GNU GPL). Первоначально созданный как компилятор для языка C, впоследствии GCC расширил свою поддержку на C++, Fortran, Ada, Go, D, Objective-C, Objective-C++ и другие языки. GCC широко используется в операционных системах на базе ядра Linux, а также в ряде других Unix-подобных систем и встраиваемых устройств.

История

Создание и ранние годы

Проект GCC был начат в 1985 году Ричардом Столлманом, основателем проекта GNU. Первоначально компилятор назывался GNU C Compiler, так как поддерживал только язык C. Первый выпуск состоялся в 1987 году. Основной целью было создание свободного компилятора, который мог бы заменить проприетарные компиляторы, используемые в то время.

В 1991 году GCC был переписан на C++, что позволило улучшить его архитектуру и упростить добавление поддержки новых языков. В 1992 году была выпущена версия 2.0, которая включала поддержку C++.

Разделение и развитие

В 1997 году из-за разногласий в сообществе разработчиков произошло разделение проекта. Группа разработчиков, недовольная медленным темпом внесения изменений, создала форк под названием EGCS (Experimental/Enhanced GNU Compiler System). EGCS быстро набрал популярность, и в 1999 году проект GCC был официально объединён с EGCS, после чего GCC стал развиваться как единый проект под управлением Стефана Брауэра.

Современный этап

С 2000-х годов GCC активно развивается, добавляя поддержку новых языков, архитектур и оптимизаций. В 2005 году была выпущена версия 4.0, которая принесла значительные улучшения в производительности и поддержку новых стандартов языков. Версия 5.0 (2015 год) ввела новую систему управления версиями и улучшенную поддержку C++11 и C++14. Версия 7.0 (2017 год) добавила поддержку языка D. Версия 10.0 (2020 год) улучшила поддержку OpenACC и OpenMP. Версия 12.0 (2022 год) представила поддержку стандарта C++23.

Архитектура

GCC состоит из нескольких ключевых компонентов:

Фронтенд (Frontend)

Фронтенд отвечает за синтаксический анализ исходного кода на конкретном языке программирования. Для каждого поддерживаемого языка существует отдельный фронтенд. Он преобразует исходный код в промежуточное представление — GIMPLE (GNU Intermediate Language). GIMPLE представляет собой упрощённую форму кода, в которой все сложные конструкции (например, циклы и условные операторы) разбиты на более простые.

Средний уровень (Middle-end)

Средний уровень выполняет оптимизацию промежуточного представления (GIMPLE) и его преобразование в другое промежуточное представление — RTL (Register Transfer Language). RTL описывает операции на уровне регистров и машинных инструкций. На этом этапе применяются различные оптимизации, такие как удаление мёртвого кода, распространение констант, подстановка функций и другие.

Бэкенд (Backend)

Бэкенд отвечает за генерацию машинного кода для конкретной целевой архитектуры (например, x86, ARM, RISC-V). Он преобразует RTL в последовательность инструкций, специфичных для данной архитектуры. Для каждой поддерживаемой архитектуры существует отдельный бэкенд.

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

GCC поддерживает следующие языки программирования (по состоянию на 2024 год):

ЯзыкПоддержка с версииСтандарты
C1.0 (1987)C89, C99, C11, C17, C23
C++2.0 (1992)C++98, C++03, C++11, C++14, C++17, C++20, C++23
Fortran4.0 (2005)Fortran 77, Fortran 90, Fortran 95, Fortran 2003, Fortran 2008, Fortran 2018
Ada3.1 (2002)Ada 83, Ada 95, Ada 2005, Ada 2012
Go4.6 (2012)Go 1.x
D7.0 (2017)D2
Objective-C2.0 (1992)Objective-C 2.0
Objective-C++3.3 (2004)Objective-C++ 2.0

Применение

GCC является основным компилятором для операционной системы Linux и многих других Unix-подобных систем. Он используется для компиляции ядра Linux, системных утилит, библиотек и прикладного программного обеспечения. GCC также широко применяется во встраиваемых системах, где требуется кросс-компиляция (компиляция кода для другой архитектуры на текущей машине). Кроме того, GCC используется в образовательных целях для изучения компиляции и оптимизации.

Критика

Несмотря на широкое распространение, GCC подвергается критике по нескольким причинам:

  • Сложность кода: Исходный код GCC считается сложным для понимания и модификации, что затрудняет участие новых разработчиков.
  • Скорость компиляции: По сравнению с некоторыми альтернативами (например, Clang), GCC может быть медленнее при компиляции больших проектов.
  • Сообщения об ошибках: Диагностические сообщения GCC иногда считаются менее информативными, чем у Clang.
  • Лицензионные ограничения: Лицензия GNU GPL может быть проблемой для проектов, которые хотят использовать GCC в проприетарном программном обеспечении, хотя это не является критикой самого компилятора.

Интересные факты

  • GCC был первым компилятором, который поддерживал язык C++.
  • GCC используется для компиляции ядра Linux с момента его создания.
  • GCC является одним из самых старых активно разрабатываемых компиляторов.
  • В 2019 году GCC стал первым компилятором, который полностью поддерживает стандарт C++20.
  • GCC поддерживает более 50 целевых архитектур, включая x86, ARM, MIPS, PowerPC, RISC-V, SPARC и другие.

Источники

  • Stallman, Richard. "GNU C Compiler." GNU Project, 1987.
  • "GCC History." GNU Compiler Collection, Free Software Foundation.
  • "GCC 4.0 Release Notes." GNU Project, 2005.
  • "GCC 5.0 Release Notes." GNU Project, 2015.
  • "GCC 12.0 Release Notes." GNU Project, 2022.
  • "GCC Architecture." GNU Compiler Collection, Free Software Foundation.
  • "GCC Supported Languages." GNU Compiler Collection, Free Software Foundation.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →