Clang (произносится , «клэнг»Обсуждение произношения названия на рассылке llvmdev ) является фронтендом для языков программирования C, C++, Objective-C, Objective-C++ и OpenCL C, использующимся совместно с фреймворком LLVM. Clang транслирует исходные коды в байт-код LLVM, затем фреймворк производит оптимизации и кодогенерацию.
Целью проекта является создание замены GNU Compiler Collection (GCC). Разработка ведётся согласно концепции open source в рамках проекта LLVM.
Clang 12 версии от апреля 2021 имеет полную поддержку всех опубликованных стандартов C++ до C++17, реализует большинство функций C++20 и добавляет частичную поддержку стандарта C++23. Начиная с версии 6.0.0 Clang компилирует программы на C++ с использованием диалекта GNU C++14 по умолчанию, который включает функции из стандарта C++14 и расширения GNU.
В проекте участвуют работники нескольких корпораций, в том числе Google и Apple. Исходный код доступен на условиях BSD-подобной лицензии.
Обзор Clang — это транслятор для C-подобных языков, созданный специально для работы на базе LLVM. Комбинация Clang и LLVM представляет собой полноценный компилятор и предоставляет набор инструментов, позволяющих полностью заменить GCC. Благодаря архитектуре, основанной на библиотеках, Clang (как и LLVM) легко встраивается в другие приложения.
Одной из главных задач Clang является поддержка инкрементной компиляции, позволяющей более тесно интегрировать компилятор и графический интерфейс среды разработки, в отличие от GCC, который был создан для работы в классическом цикле «компиляция-линковка-отладка». В отличие от GCC, ориентированного преимущественно на кодогенерацию, Clang стремится предоставить универсальный фреймворк для парсинга, индексации, статического анализа и компиляции языков семейства Си. В частности, Clang не производит упрощений исходного кода на этапе парсинга (как это делает GCC), гарантируя точное воспроизведение исходного текста в абстрактное синтаксическое дерево.
В отличие от GCC, Clang изначально спроектирован для максимального сохранения информации в ходе процесса компиляции, в том числе сохранения «внешнего вида» исходного кода. Эта особенность позволяет Clang создавать развернутые контекстно-ориентированные сообщения об ошибках, понятные как для программистов, так и для сред разработки. Модульный дизайн компилятора позволяет использовать его в составе среды разработки для индексирования кода, подсветки синтаксиса и переработки кода.
Clang поддерживает большинство распространенных опций GCC.
clangd
clangd (от ) — это демон-сервер для , позволяющий средам разработки и текстовым редакторам подсвечивать синтаксис, дополнять код и отображать ошибки для языков C и C++. Он впервые появился в LLVM 5.0.0 (2017 год).
clang-format
clang-format — это утилита для автоматического приведения оформления кода к единому стилю. Она читает описание стиля из файла .clang-format в дереве проекта.
История развития В таблице представлены только наиболее значительные события.
Дата Событие25 февраля 2009Clang/LLVM позволяют скомпилировать ядро FreeBSD. Сейчас весь исходный код FreeBSD — как ядро, так и пользовательские программы — может быть скомпилирован с помощью Clang.16 марта 2009Clang/LLVM компилирует работоспособное ядро DragonFly BSD.23 октября 2009Clang 1.0 впервые выпущен в составе LLVM 2.6.Декабрь 2009Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор libstdc++ из GCC 4.2 и генерировать работоспособный код для нетривиальных программClang team, clang: a C language family frontend for LLVM , а также компилирует себя.2 февраля 2010Clang осуществил self-hosting (скомпилировал работоспособную версию clang+llvm).20 февраля 2010Исходный код HelenOS был изменён для успешной компиляции с помощью Clang и прошёл все регрессионные тесты для ядра и пользовательских программ на платформе IA-32.20 мая 2010Последняя версия Clang успешно собирает Boost и проходит большинство тестов.10 июня 2010Clang и LLVM становятся частью FreeBSD (хотя компилятором по умолчанию остаётся GCC).25 октября 2010Clang/LLVM успешно компилирует ядро Linux (частично)[ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts) . До полной поддержки остаётся исправить несколько ошибок в clang и избавиться от некоторых gnu-специфичных конструкций в ядре.Январь 2011Проведена предварительная работа по поддержке черновика стандарта C++0x, в разрабатываемой версии Clang поддерживаются некоторые новые возможности.10 февраля 2011Clang успешно компилирует виртуальную машину Java HotSpot.18 августа 2011Неофициальная версия Clang с поддержкой SafeCode, технологией отслеживания возможных проблем при работе с памятью в разрабатываемом приложении.22 октября 2011Обеспечена возможность сборки LibreOffice компилятором Clang.28 февраля 2012Clang 3.0 смог скомпилировать более 91 % пакетов Debian.29 февраля 2012Clang становится основным компилятором для Minix 3.12 мая 2012Объявлено о замене GCC на Clang в базовой системе FreeBSD.14 июля 2012Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang.19 апреля 2013Объявлено о поддержке Clang’ом стандарта языка C++11.18 июня 2013Релиз Clang 3.3 поддерживает 100 % возможностей C++11.07 ноября 2013Clang поддерживает 100 % возможностей C++14 [llvm-project] Revision 194194.11 сентября 2014С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC.13 марта 2017Clang 4.0.0 Релиз.26 июля 2017Clang становится компилятором по умолчанию в OpenBSD 6.2..7 сентября 2017Clang 5.0.0 Релиз.5 марта 2018Clang становится компилятором по умолчанию сборок Google Chrome для всех поддерживаемых платформ.8 марта 2018Clang 6.0.0 Релиз.19 сентября 2018Clang 7.0.0 Релиз20 марта 2019Clang 8.0.0 Релиз19 сентября 2019Clang 9.0.0 Релиз24 марта 2020Clang 10.0.0 Релиз6 января 2021Clang 11.0.0 Релиз14 апреля 2021Clang 12.0.0 Релиз4 октября 2021Clang 13.0.0 Релиз25 марта 2022Clang 14.0.0 Релиз6 сентября 2022Clang 15.0.0 Релиз17 марта 2023Clang 16.0.0 Релиз19 сентября 2023Clang 17.0.1 Релиз
Дата Событие11 июля 2007 Clang выпущен под лицензией с открытым исходным кодом25 февраля 2009Clang/LLVM может скомпилировать работающее ядро FreeBSD.16 марта 2009Clang/LLVM может скомпилировать работающее ядро DragonFly BSD.23 октября 2009Вышел Clang 1.0, впервые с поддержкой LLVM 2.6.декабрь 2009Кодогенерация для Си и Objective-C достигает производственного качества. Поддержка C++ и Objective-C++ всё еще неполная. Clang C++ может разбирать libstdc++ GCC 4.2 и генерировать рабочий код для нетривиальных программ,,а также может компилировать себя.2 февраля 2010Clang самодостаточен.20 мая 2010Последняя версия Clang успешно собрала библиотеки Boost и прошла почти все тесты.10 июня 2010Clang/LLVM становится неотъемлемой частью FreeBSD, но компилятором по умолчанию по-прежнему является GCC.25 октября 2010Clang/LLVM может скомпилировать работающее модифицированное ядро Linux.январь 2011Завершена предварительная работа по поддержке черновика стандарта C++0x, с некоторыми новыми возможностями черновика, поддерживаемыми в разрабатываемой версии Clang.10 февраля 2011Clang может скомпилировать работающую виртуальную машину Java HotSpot.19 января 2012становится необязательным компонентом в системе кроссплатформенной сборки NetBSD, по-прежнему используется по умолчанию.29 февраля 2012Clang 3.0 может пересобрать 91.2% архива Debian.29 февраля 2012Clang становится компилятором по умолчанию в MINIX 312 мая 2012Clang/LLVM объявлен заменой GCC в FreeBSD.5 ноября 2012Clang становится компилятором по умолчанию в FreeBSD 10.x на amd64/i386.18 февраля 2013Clang/LLVM может скомпилировать работающее модифицированное ядро Linux системы Android для Nexus 7.19 апреля 2013Clang полностью поддерживает все возможности C++11.6 ноября 2013Clang полностью поддерживает все возможности C++14.11 сентября 2014Clang 3.5 может пересобрать 94.3% архива Debian. Процент ошибок снизился на 1.2% на каждый выпуск с января 2013, в основном благодаря улучшенной совместимости с флагами GCC.27 февраля 2015Вышел Clang 3.6.0. Версией Си по умолчанию становится -std=gnu11.октябрь 2016Clang становится компилятором по умолчанию для Android (а позже — единственным компилятором, поддерживаемым Android NDK).13 марта 2017Вышел Clang 4.0.026 июля 2017Clang становится компилятором по умолчанию в OpenBSD 6.2 на amd64/i386.7 сентября 2017Вышел Clang 5.0.019 января 2018Clang становится компилятором по умолчанию в OpenBSD 6.3 на arm.5 марта 2018Clang теперь используется для сборки Google Chrome для Windows.8 марта 2018Вышел Clang 6.0.0. Версией C++ по умолчанию становится -std=gnu++14.5 сентября 2018Clang теперь используется для сборки Firefox для Windows.19 сентября 2018Вышел Clang 7.0.020 марта 2019Вышел Clang 8.0.01 июля 2019Clang становится компилятором по умолчанию в OpenBSD 6.6 на mips64.19 сентября 2019Вышел Clang 9.0.0 с официальной поддержкой целевой платформы RISC-V.29 февраля 2020Clang становится единственным компилятором Си в базовой системе FreeBSD после удаления GCC.24 марта 2020Вышел Clang 10.0.02 апреля 2020Clang становится компилятором по умолчанию в OpenBSD 6.7 на powerpc.12 октября 2020Вышел Clang 11.0.0. Версией Си умолчанию становится -std=gnu17.21 декабря 2020Clang становится компилятором по умолчанию в OpenBSD 6.9 на mips64el.14 апреля 2021Вышел Clang 12.0.04 октября 2021Вышел Clang 13.0.025 марта 2022Вышел Clang 14.0.06 сентября 2022Вышел Clang 15.0.017 марта 2023Вышел Clang 16.0.0. Версией C++ по умолчанию становится -std=gnu++17.9 сентября 2023Вышел Clang 17.0.18 марта 2024Вышел Clang 18.1.117 сентября 2024Вышел Clang 19.1.04 марта 2025Вышел Clang 20.1.026 августа 2025Вышел Clang 21.1.024 февраля 2026Вышел Clang 22.1.020 августа 2026Clang становится компилятором по умолчанию в OpenBSD 8.0 на sparc64.25 августа 2026Вышел Clang 23.1.0
Примечания
Ссылки Официальная страница проекта Категория:Компиляторы Си Категория:Компиляторы C++ Категория:Компиляторы Objective-C Категория:Статические анализаторы кода Категория:Программное обеспечение для macOS Категория:Программное обеспечение для Linux Категория:Свободные компиляторы и интерпретаторы Категория:Программное обеспечение Apple