Clang
| Clang | |
|---|---|
| Скриншот информации о версии Clang 21.1.7 и подробной информации о компиляции, а также скомпилированной программы | |
| Тип | Интерфейс компилятора |
| Автор | Крис Латтнер[англ.] |
| Разработчик | LLVM Developer Group |
| Написана на | C++ |
| Операционная система | Unix-подобная |
| Дата выпуска | 26 сентября 2007[1] |
| Аппаратные платформы | AArch64, ARMv7, IA-32, x86-64, ppc64le[англ.][2] |
| Последняя версия | 22.1.1 (11 марта 2026) |
| Репозиторий | github.com/llvm/llvm-pro… |
| Лицензия | Apache 2.0 с исключениями LLVM[3][4] |
| Сайт | clang.llvm.org (англ.) |
Clang (произносится /ˈklæŋ/, «клэнг»[5]) является фронтендом для языков программирования 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 (от англ. clang daemon) — это демон-сервер для LSP[англ.], позволяющий средам разработки и текстовым редакторам подсвечивать синтаксис, дополнять код и отображать ошибки для языков C и C++. Он впервые появился в LLVM 5.0.0 (2017 год).
clang-format
[править | править код]clang-format — это утилита для автоматического приведения оформления кода к единому стилю. Она читает описание стиля из файла .clang-format в дереве проекта.
История развития
[править | править код]В таблице представлены только наиболее значительные события.
| Дата | Событие |
|---|---|
| 25 февраля 2009 | Clang/LLVM позволяют скомпилировать ядро FreeBSD[7][8]. Сейчас весь исходный код FreeBSD — как ядро, так и пользовательские программы — может быть скомпилирован с помощью Clang. |
| 16 марта 2009 | Clang/LLVM компилирует работоспособное ядро DragonFly BSD[9][10]. |
| 23 октября 2009 | Clang 1.0 впервые выпущен в составе LLVM 2.6. |
| Декабрь 2009 | Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор libstdc++ из GCC 4.2 и генерировать работоспособный код для нетривиальных программ[11], а также компилирует себя[12]. |
| 2 февраля 2010 | Clang осуществил self-hosting (скомпилировал работоспособную версию clang+llvm)[13]. |
| 20 февраля 2010 | Исходный код HelenOS был изменён для успешной компиляции с помощью Clang и прошёл все регрессионные тесты для ядра и пользовательских программ на платформе IA-32[14]. |
| 20 мая 2010 | Последняя версия Clang успешно собирает Boost и проходит большинство тестов[15]. |
| 10 июня 2010 | Clang и LLVM становятся частью FreeBSD (хотя компилятором по умолчанию остаётся GCC)[16]. |
| 25 октября 2010 | Clang/LLVM успешно компилирует ядро Linux (частично)[17]. До полной поддержки остаётся исправить несколько ошибок в clang[18] и избавиться от некоторых gnu-специфичных конструкций в ядре. |
| Январь 2011 | Проведена предварительная работа по поддержке черновика стандарта C++0x, в разрабатываемой версии Clang поддерживаются некоторые новые возможности[19][20]. |
| 10 февраля 2011 | Clang успешно компилирует виртуальную машину Java HotSpot[21]. |
| 18 августа 2011 | Неофициальная версия Clang с поддержкой SafeCode, технологией отслеживания возможных проблем при работе с памятью в разрабатываемом приложении[22]. |
| 22 октября 2011 | Обеспечена возможность сборки LibreOffice компилятором Clang[23]. |
| 28 февраля 2012 | Clang 3.0 смог скомпилировать более 91 % пакетов Debian[24]. |
| 29 февраля 2012 | Clang становится основным компилятором для Minix 3[25]. |
| 12 мая 2012 | Объявлено о замене GCC на Clang в базовой системе FreeBSD[26]. |
| 14 июля 2012 | Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang[27]. |
| 19 апреля 2013 | Объявлено о поддержке Clang’ом стандарта языка C++11[28]. |
| 18 июня 2013 | Релиз Clang 3.3 поддерживает 100 % возможностей C++11. |
| 07 ноября 2013 | Clang поддерживает 100 % возможностей C++14[29]. |
| 11 сентября 2014 | С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC[30]. |
| 13 марта 2017 | Clang 4.0.0 Релиз. |
| 26 июля 2017 | Clang становится компилятором по умолчанию в OpenBSD 6.2.[31]. |
| 7 сентября 2017 | Clang 5.0.0 Релиз. |
| 5 марта 2018 | Clang становится компилятором по умолчанию сборок Google Chrome для всех поддерживаемых платформ.[32] |
| 8 марта 2018 | Clang 6.0.0 Релиз. |
| 19 сентября 2018 | Clang 7.0.0 Релиз |
| 20 марта 2019 | Clang 8.0.0 Релиз |
| 19 сентября 2019 | Clang 9.0.0 Релиз |
| 24 марта 2020 | Clang 10.0.0 Релиз |
| 6 января 2021 | Clang 11.0.0 Релиз |
| 14 апреля 2021 | Clang 12.0.0 Релиз |
| 4 октября 2021 | Clang 13.0.0 Релиз |
| 25 марта 2022 | Clang 14.0.0 Релиз |
| 6 сентября 2022 | Clang 15.0.0 Релиз |
| 17 марта 2023 | Clang 16.0.0 Релиз |
| 19 сентября 2023 | Clang 17.0.1 Релиз |
| Дата | Событие |
|---|---|
| 11 июля 2007 | Clang выпущен под лицензией с открытым исходным кодом |
| 25 февраля 2009 | Clang/LLVM может скомпилировать работающее ядро FreeBSD.[33][34] |
| 16 марта 2009 | Clang/LLVM может скомпилировать работающее ядро DragonFly BSD.[35][36] |
| 23 октября 2009 | Вышел Clang 1.0, впервые с поддержкой LLVM 2.6. |
| декабрь 2009 | Кодогенерация для Си и Objective-C достигает производственного качества. Поддержка C++ и Objective-C++ всё еще неполная. Clang C++ может разбирать libstdc++ GCC 4.2 и генерировать рабочий код для нетривиальных программ,[11],а также может компилировать себя.[37] |
| 2 февраля 2010 | Clang самодостаточен.[38] |
| 20 мая 2010 | Последняя версия Clang успешно собрала библиотеки Boost и прошла почти все тесты.[39] |
| 10 июня 2010 | Clang/LLVM становится неотъемлемой частью FreeBSD, но компилятором по умолчанию по-прежнему является GCC.[40] |
| 25 октября 2010 | Clang/LLVM может скомпилировать работающее модифицированное ядро Linux.[41] |
| январь 2011 | Завершена предварительная работа по поддержке черновика стандарта C++0x, с некоторыми новыми возможностями черновика, поддерживаемыми в разрабатываемой версии Clang.[42][43] |
| 10 февраля 2011 | Clang может скомпилировать работающую виртуальную машину Java HotSpot.[21] |
| 19 января 2012 | становится необязательным компонентом в системе кроссплатформенной сборки NetBSD, по-прежнему используется по умолчанию.[44] |
| 29 февраля 2012 | Clang 3.0 может пересобрать 91.2% архива Debian.[45] |
| 29 февраля 2012 | Clang становится компилятором по умолчанию в MINIX 3[46] |
| 12 мая 2012 | Clang/LLVM объявлен заменой GCC в FreeBSD.[47] |
| 5 ноября 2012 | Clang становится компилятором по умолчанию в FreeBSD 10.x на amd64/i386.[48] |
| 18 февраля 2013 | Clang/LLVM может скомпилировать работающее модифицированное ядро Linux системы Android для Nexus 7.[49][50] |
| 19 апреля 2013 | Clang полностью поддерживает все возможности C++11.[51] |
| 6 ноября 2013 | Clang полностью поддерживает все возможности C++14.[52] |
| 11 сентября 2014 | Clang 3.5 может пересобрать 94.3% архива Debian. Процент ошибок снизился на 1.2% на каждый выпуск с января 2013, в основном благодаря улучшенной совместимости с флагами GCC.[53] |
| 27 февраля 2015 | Вышел Clang 3.6.0. Версией Си по умолчанию становится -std=gnu11.
|
| октябрь 2016 | Clang становится компилятором по умолчанию для Android[54] (а позже — единственным компилятором, поддерживаемым Android NDK[55]). |
| 13 марта 2017 | Вышел Clang 4.0.0 |
| 26 июля 2017 | Clang становится компилятором по умолчанию в OpenBSD 6.2 на amd64/i386.[56] |
| 7 сентября 2017 | Вышел Clang 5.0.0 |
| 19 января 2018 | Clang становится компилятором по умолчанию в OpenBSD 6.3 на arm.[57] |
| 5 марта 2018 | Clang теперь используется для сборки Google Chrome для Windows.[58] |
| 8 марта 2018 | Вышел Clang 6.0.0. Версией C++ по умолчанию становится -std=gnu++14.
|
| 5 сентября 2018 | Clang теперь используется для сборки Firefox для Windows.[59] |
| 19 сентября 2018 | Вышел Clang 7.0.0 |
| 20 марта 2019 | Вышел Clang 8.0.0 |
| 1 июля 2019 | Clang становится компилятором по умолчанию в OpenBSD 6.6 на mips64.[60] |
| 19 сентября 2019 | Вышел Clang 9.0.0 с официальной поддержкой целевой платформы RISC-V.[61] |
| 29 февраля 2020 | Clang становится единственным компилятором Си в базовой системе FreeBSD после удаления GCC.[62] |
| 24 марта 2020 | Вышел Clang 10.0.0 |
| 2 апреля 2020 | Clang становится компилятором по умолчанию в OpenBSD 6.7 на powerpc.[63] |
| 12 октября 2020 | Вышел Clang 11.0.0. Версией Си умолчанию становится -std=gnu17.
|
| 21 декабря 2020 | Clang становится компилятором по умолчанию в OpenBSD 6.9 на mips64el.[64] |
| 14 апреля 2021 | Вышел Clang 12.0.0 |
| 4 октября 2021 | Вышел Clang 13.0.0 |
| 25 марта 2022 | Вышел Clang 14.0.0 |
| 6 сентября 2022 | Вышел Clang 15.0.0 |
| 17 марта 2023 | Вышел Clang 16.0.0. Версией C++ по умолчанию становится -std=gnu++17.
|
| 9 сентября 2023 | Вышел Clang 17.0.1 |
| 8 марта 2024 | Вышел Clang 18.1.1 |
| 17 сентября 2024 | Вышел Clang 19.1.0 |
| 4 марта 2025 | Вышел Clang 20.1.0 |
| 26 августа 2025 | Вышел Clang 21.1.0 |
| 24 февраля 2026 | Вышел Clang 22.1.0 |
Примечания
[править | править код]- ↑ LLVM 2.1 Release Notes. llvm.org. LLVM Developer Group (27 сентября 2007). Дата обращения: 30 апреля 2018. Архивировано 17 ноября 2016 года.
- ↑ Releases. llvm – llvm-project repo. LLVM Developer Group (27 августа 2021). Дата обращения: 12 сентября 2021. Архивировано 12 сентября 2021 года.
- ↑ LICENSE.TXT, llvm.org, LLVM Developer Group, Архивировано 11 ноября 2020, Дата обращения: 24 сентября 2019
- ↑ LLVM Developer Policy, llvm.org, LLVM Developer Group, § Copyright, License, and Patents, Архивировано 13 ноября 2012, Дата обращения: 12 сентября 2021
- ↑ Обсуждение произношения названия на рассылке llvmdev Архивировано 8 февраля 2012 года.
- ↑ 1 2 https://github.com/llvm/llvm-project/tree/main?tab=License-1-ov-file#readme
- ↑ Divacky, Roman. [ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64. Архивировано из оригинала 30 апреля 2012 года.
- ↑ BuildingFreeBSDWithClang — FreeBSD Wiki. Дата обращения: 17 марта 2011. Архивировано 1 октября 2012 года.
- ↑ Hornung, Alex. llvm/clang once more. Архивировано из оригинала 30 апреля 2012 года.
- ↑ DragonFlyBSD: clang. Дата обращения: 17 марта 2011. Архивировано 5 октября 2012 года.
- ↑ 1 2 Clang team, clang: a C language family frontend for LLVM Архивная копия от 13 марта 2011 на Wayback Machine
- ↑ Clang can compile LLVM and Clang. Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
- ↑ Clang Successfully Self-Hosts. Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
- ↑ HelenOS mainline changeset head,294. Архивировано из оригинала 30 апреля 2012 года.
- ↑ Gregor, Doug. Clang++ Builds Boost! Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
- ↑ Davis, Brad. FreeBSD Status Reports April - June, 2010. Архивировано из оригинала 30 апреля 2012 года.
- ↑ [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts) Архивировано 7 сентября 2015 года.
- ↑ Страница отслеживания ошибок llvm, препятствующих сборке ядра Linux. Дата обращения: 17 октября 2011. Архивировано 9 июня 2014 года.
- ↑ Gregor, Douglas (26 января 2011). New C++0x feature support in Clang (Mailing list). Архивировано из оригинала 30 января 2011. Дата обращения: 29 января 2011.
- ↑ C++ and C++'0x Support in Clang. LLVM. Архивировано из оригинала 30 апреля 2012 года.
- ↑ 1 2 Simonis, Volker. Compiling the HotSpot VM with Clang (10 февраля 2011). — «While the overall GCC compatibility is excellent and the compile times are impressive, the performance of the generated code is still lacking behind a recent GCC version. ». Дата обращения: 13 февраля 2011. Архивировано из оригинала 30 апреля 2012 года.
- ↑ Criswell, John. [LLVMdev] Clang + SAFECode Release Announcement (18 августа 2011). Дата обращения: 25 августа 2011. Архивировано из оригинала 30 апреля 2012 года.
- ↑ Building LibreOffice with Clang (22 октября 2011). Дата обращения: 23 октября 2011. Архивировано из оригинала 30 апреля 2012 года.
- ↑ Ledru, Sylvestre. Rebuild of the Debian archive with clang. Архивировано из оригинала 18 июня 2012 года.
- ↑ Minix 3.2.0, Releases. Clang is the default compiler. Архивировано из оригинала 18 июня 2012 года.
- ↑ Gerzo, Daniel. FreeBSD Quarterly Status Report January-March, 2012. Архивировано из оригинала 30 июня 2012 года.
- ↑ OpenNews: Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang. Дата обращения: 16 июля 2012. Архивировано из оригинала 18 июля 2012 года.
- ↑ Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*! Дата обращения: 22 апреля 2013. Архивировано 24 сентября 2019 года.
- ↑ [1]Архивная копия от 30 января 2017 на Wayback Machine [llvm-project] Revision 194194
- ↑ Rebuild of Debian using Clang 3.5.0. sylvestre.ledru.info. Дата обращения: 6 мая 2016. Архивировано 19 апреля 2016 года.
- ↑ Nagy, Robert (26 июля 2017). switch the default compiler on amd64 and i386 to clang (Mailing list). Архивировано 25 октября 2018. Дата обращения: 30 сентября 2017.
- ↑ Clang is now used to build Chrome for Windows. Дата обращения: 6 марта 2018. Архивировано 5 марта 2018 года.
- ↑ Divacky, Roman. [Announce] clang/llvm can compile booting FreeBSD kernel on i386/amd64 (25 февраля 2009). Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
- ↑ Building FreeBSD with Clang, Wiki.freebsd.org, 24 августа 2012, Архивировано 30 апреля 2018, Дата обращения: 18 сентября 2012
- ↑ Hornung, Alex. llvm/clang once more. Дата обращения: 30 апреля 2018. Архивировано 30 апреля 2018 года.
- ↑ Clang, DragonFly BSD, Архивировано 30 апреля 2018, Дата обращения: 18 сентября 2012
- ↑ Clang can compile LLVM and Clang. LLVM Project Blog (24 декабря 2009). Дата обращения: 31 декабря 2009. Архивировано 26 апреля 2012 года.
- ↑ Clang Successfully Self-Hosts. LLVM Project Blog (4 февраля 2010). Дата обращения: 5 февраля 2010. Архивировано 26 апреля 2012 года.
- ↑ Gregor, Doug. Clang++ Builds Boost! LLVM Project Blog (20 мая 2010). Дата обращения: 21 мая 2010. Архивировано 26 апреля 2012 года.
- ↑ Davis, Brad. FreeBSD Status Reports April–June, 2010. Дата обращения: 30 апреля 2018. Архивировано 24 июня 2018 года.
- ↑ Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts), Lists.cs.uiuc.edu, Архивировано из оригинала 7 сентября 2015, Дата обращения: 18 сентября 2012
- ↑ Gregor, Douglas (26 января 2011). New C++0x feature support in Clang (Mailing list). Архивировано из оригинала 30 января 2011. Дата обращения: 29 января 2011.
- ↑ C++ and C++'0x Support in Clang. LLVM. Дата обращения: 12 марта 2023. Архивировано 4 июля 2013 года.
- ↑ Sonnenberger, Jörg. Status of NetBSD and LLVM (19 января 2012). Дата обращения: 26 февраля 2014. Архивировано из оригинала 21 сентября 2016 года.
- ↑ Ledru, Sylvestre. Rebuild of the Debian archive with clang. Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
- ↑ Official Minix 3 website: News. Дата обращения: 7 декабря 2012. Архивировано 17 декабря 2009 года.
- ↑ Gerzo, Daniel (12 мая 2012). FreeBSD Quarterly Status Report January–March, 2012 (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 14 мая 2012.
- ↑ Davis, Brooks (5 ноября 2012). Heads Up: Clang now the default on x86 (Mailing list). Архивировано 30 апреля 2018. Дата обращения: 7 ноября 2012.
- ↑ Webster, Behan. LLVMLinux: Compiling Android with LLVM (18 февраля 2013). Дата обращения: 11 мая 2013. Архивировано из оригинала 12 мая 2014 года.
- ↑ Tinti, Vinicius. LLVMLinux: Nexus 7 (17 марта 2013). Дата обращения: 11 мая 2013. Архивировано из оригинала 11 июня 2014 года.
- ↑ Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*! Дата обращения: 20 апреля 2013. Архивировано 24 сентября 2019 года.
- ↑ [llvm-project] Revision 194194. Дата обращения: 30 апреля 2018. Архивировано из оригинала 18 ноября 2018 года.
- ↑ Ledru, Sylvestre. Rebuild of Debian using Clang 3.5.0. Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
- ↑ NDK Revision History | Android Developers (англ.). developer.android.com. Дата обращения: 6 марта 2018. Архивировано 6 марта 2018 года.
- ↑ NDK Revision History | Android NDK | Android Developers (англ.). Android Developers. Дата обращения: 30 апреля 2018. Архивировано 5 апреля 2019 года.
- ↑ Nagy, Robert (26 июля 2017). switch the default compiler on amd64 and i386 to clang (Mailing list). Архивировано 25 октября 2018. Дата обращения: 30 сентября 2017.
- ↑ Kettenis, Mark (19 января 2018). Switch the default compiler on armv7 to clang (Mailing list). Архивировано 8 апреля 2022. Дата обращения: 27 августа 2020.
- ↑ Clang is now used to build Chrome for Windows. blog.llvm.org (5 марта 2018). Дата обращения: 7 апреля 2018. Архивировано 5 марта 2018 года.
- ↑ Firefox Beta 63.0beta, See All New Features, Updates and Fixes (англ.). www.mozilla.org. Дата обращения: 18 марта 2020. Архивировано 19 апреля 2021 года.
- ↑ Hankala, Visa (1 июля 2019). Switch the default compiler on octeon to clang (Mailing list). Архивировано 8 апреля 2022. Дата обращения: 27 августа 2020.
- ↑ LLVM 9 Releases With Official RISC-V Target Support, Asm Goto, Clang 9, And More. riscv.org (26 сентября 2019). Дата обращения: 26 сентября 2019. Архивировано 28 декабря 2019 года.
- ↑ FreeBSD svn commit r358454 (29 февраля 2020). Дата обращения: 7 марта 2020. Архивировано 10 марта 2020 года.
- ↑ Kettenis, Mark (2 апреля 2020). Switch the default compiler on powerpc to clang (Mailing list). Архивировано 8 апреля 2022. Дата обращения: 27 августа 2020.
- ↑ Hankala, Visa (21 декабря 2020). Make clang the default compiler on loongson (Mailing list). Архивировано 13 января 2021. Дата обращения: 1 января 2021.