Перейти к содержанию

Clang

Материал из Википедии — свободной энциклопедии
Clang
Скриншот программы Clang
Скриншот информации о версии Clang 21.1.7 и подробной информации о компиляции, а также скомпилированной программы
Тип Интерфейс компилятора
Автор Крис Латтнер[англ.]
Разработчик LLVM Developer Group
Написана на C++
Операционная система Unix-подобная
Дата выпуска 26 сентября 2007; 19 лет назад (2007-09-26)[1]
Аппаратные платформы AArch64, ARMv7, IA-32, x86-64, ppc64le[англ.][2]
Последняя версия 22.1.1 (11 марта 2026)
Репозиторий github.com/llvm
Лицензия 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
Тип открытое программное обеспечение
Написана на C++
Операционные системы кроссплатформенность, Windows и Linux
Репозиторий github.com/llvm/llvm-pro…
Лицензия Apache License 2.0[6]
Сайт clangd.llvm.org (англ.)

clangd (от англ. clang daemon) — это демон-сервер для LSP[англ.], позволяющий средам разработки и текстовым редакторам подсвечивать синтаксис, дополнять код и отображать ошибки для языков C и C++. Он впервые появился в LLVM 5.0.0 (2017 год).

clang-format
Тип открытое программное обеспечение
Написана на C++
Операционная система кроссплатформенность
Аппаратные платформы кроссплатформенность, Linux, Windows и macOS
Репозиторий github.com/llvm/llvm-pro…
Лицензия Apache License 2.0[7]
Сайт clang.llvm.org (англ.)

clang-format — это утилита для автоматического приведения оформления кода к единому стилю. Она читает описание стиля из файла .clang-format в дереве проекта.

История развития

[править | править код]

В таблице представлены только наиболее значительные события.

Дата Событие
25 февраля 2009Clang/LLVM позволяют скомпилировать ядро FreeBSD[8][9]. Сейчас весь исходный код FreeBSD — как ядро, так и пользовательские программы — может быть скомпилирован с помощью Clang.
16 марта 2009Clang/LLVM компилирует работоспособное ядро DragonFly BSD[10][11].
23 октября 2009Clang 1.0 впервые выпущен в составе LLVM 2.6.
Декабрь 2009Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор libstdc++ из GCC 4.2 и генерировать работоспособный код для нетривиальных программ[12], а также компилирует себя[13].
2 февраля 2010Clang осуществил self-hosting (скомпилировал работоспособную версию clang+llvm)[14].
20 февраля 2010Исходный код HelenOS был изменён для успешной компиляции с помощью Clang и прошёл все регрессионные тесты для ядра и пользовательских программ на платформе IA-32[15].
20 мая 2010Последняя версия Clang успешно собирает Boost и проходит большинство тестов[16].
10 июня 2010Clang и LLVM становятся частью FreeBSD (хотя компилятором по умолчанию остаётся GCC)[17].
25 октября 2010Clang/LLVM успешно компилирует ядро Linux (частично)[18]. До полной поддержки остаётся исправить несколько ошибок в clang[19] и избавиться от некоторых gnu-специфичных конструкций в ядре.
Январь 2011Проведена предварительная работа по поддержке черновика стандарта C++0x, в разрабатываемой версии Clang поддерживаются некоторые новые возможности[20][21].
10 февраля 2011Clang успешно компилирует виртуальную машину Java HotSpot[22].
18 августа 2011Неофициальная версия Clang с поддержкой SafeCode, технологией отслеживания возможных проблем при работе с памятью в разрабатываемом приложении[23].
22 октября 2011Обеспечена возможность сборки LibreOffice компилятором Clang[24].
28 февраля 2012Clang 3.0 смог скомпилировать более 91 % пакетов Debian[25].
29 февраля 2012Clang становится основным компилятором для Minix 3[26].
12 мая 2012Объявлено о замене GCC на Clang в базовой системе FreeBSD[27].
14 июля 2012Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang[28].
19 апреля 2013Объявлено о поддержке Clang’ом стандарта языка C++11[29].
18 июня 2013Релиз Clang 3.3 поддерживает 100 % возможностей C++11.
07 ноября 2013Clang поддерживает 100 % возможностей C++14[30].
11 сентября 2014 С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC[31].
13 марта 2017 Clang 4.0.0 Релиз.
26 июля 2017Clang становится компилятором по умолчанию в OpenBSD 6.2.[32].
7 сентября 2017 Clang 5.0.0 Релиз.
5 марта 2018Clang становится компилятором по умолчанию сборок Google Chrome для всех поддерживаемых платформ.[33]
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 июля 2007Clang выпущен под лицензией с открытым исходным кодом
25 февраля 2009Clang/LLVM может скомпилировать работающее ядро FreeBSD.[34][35]
16 марта 2009Clang/LLVM может скомпилировать работающее ядро DragonFly BSD.[36][37]
23 октября 2009Вышел Clang 1.0, впервые с поддержкой LLVM 2.6.
декабрь 2009Кодогенерация для Си и Objective-C достигает производственного качества. Поддержка C++ и Objective-C++ всё еще неполная. Clang C++ может разбирать libstdc++ GCC 4.2 и генерировать рабочий код для нетривиальных программ,[12],а также может компилировать себя.[38]
2 февраля 2010Clang самодостаточен.[39]
20 мая 2010Последняя версия Clang успешно собрала библиотеки Boost и прошла почти все тесты.[40]
10 июня 2010Clang/LLVM становится неотъемлемой частью FreeBSD, но компилятором по умолчанию по-прежнему является GCC.[41]
25 октября 2010Clang/LLVM может скомпилировать работающее модифицированное ядро Linux.[42]
январь 2011Завершена предварительная работа по поддержке черновика стандарта C++0x, с некоторыми новыми возможностями черновика, поддерживаемыми в разрабатываемой версии Clang.[43][44]
10 февраля 2011Clang может скомпилировать работающую виртуальную машину Java HotSpot.[22]
19 января 2012становится необязательным компонентом в системе кроссплатформенной сборки NetBSD, по-прежнему используется по умолчанию.[45]
29 февраля 2012Clang 3.0 может пересобрать 91.2% архива Debian.[46]
29 февраля 2012Clang становится компилятором по умолчанию в MINIX 3[47]
12 мая 2012Clang/LLVM объявлен заменой GCC в FreeBSD.[48]
5 ноября 2012Clang становится компилятором по умолчанию в FreeBSD 10.x на amd64/i386.[49]
18 февраля 2013Clang/LLVM может скомпилировать работающее модифицированное ядро Linux системы Android для Nexus 7.[50][51]
19 апреля 2013Clang полностью поддерживает все возможности C++11.[52]
6 ноября 2013Clang полностью поддерживает все возможности C++14.[53]
11 сентября 2014Clang 3.5 может пересобрать 94.3% архива Debian. Процент ошибок снизился на 1.2% на каждый выпуск с января 2013, в основном благодаря улучшенной совместимости с флагами GCC.[54]
27 февраля 2015 Вышел Clang 3.6.0. Версией Си по умолчанию становится -std=gnu11.
октябрь 2016 Clang становится компилятором по умолчанию для Android[55] (а позже — единственным компилятором, поддерживаемым Android NDK[56]).
13 марта 2017 Вышел Clang 4.0.0
26 июля 2017Clang становится компилятором по умолчанию в OpenBSD 6.2 на amd64/i386.[57]
7 сентября 2017 Вышел Clang 5.0.0
19 января 2018Clang становится компилятором по умолчанию в OpenBSD 6.3 на arm.[58]
5 марта 2018 Clang теперь используется для сборки Google Chrome для Windows.[59]
8 марта 2018 Вышел Clang 6.0.0. Версией C++ по умолчанию становится -std=gnu++14.
5 сентября 2018 Clang теперь используется для сборки Firefox для Windows.[60]
19 сентября 2018 Вышел Clang 7.0.0
20 марта 2019 Вышел Clang 8.0.0
1 июля 2019Clang становится компилятором по умолчанию в OpenBSD 6.6 на mips64.[61]
19 сентября 2019 Вышел Clang 9.0.0 с официальной поддержкой целевой платформы RISC-V.[62]
29 февраля 2020 Clang становится единственным компилятором Си в базовой системе FreeBSD после удаления GCC.[63]
24 марта 2020 Вышел Clang 10.0.0
2 апреля 2020Clang становится компилятором по умолчанию в OpenBSD 6.7 на powerpc.[64]
12 октября 2020 Вышел Clang 11.0.0. Версией Си умолчанию становится -std=gnu17.
21 декабря 2020Clang становится компилятором по умолчанию в OpenBSD 6.9 на mips64el.[65]
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
20 августа 2026Clang становится компилятором по умолчанию в OpenBSD 8.0 на sparc64.[66]
25 августа 2026 Вышел Clang 23.1.0

Примечания

[править | править код]
  1. ↑ LLVM 2.1 Release Notes. llvm.org. LLVM Developer Group (27 сентября 2007). Дата обращения: 30 апреля 2018. Архивировано 17 ноября 2016 года.
  2. ↑ Releases. llvm – llvm-project repo. LLVM Developer Group (27 августа 2021). Дата обращения: 12 сентября 2021. Архивировано 12 сентября 2021 года.
  3. ↑ LICENSE.TXT, llvm.org, LLVM Developer Group, Архивировано 11 ноября 2020, Дата обращения: 24 сентября 2019
  4. ↑ LLVM Developer Policy, llvm.org, LLVM Developer Group, § Copyright, License, and Patents, Архивировано 13 ноября 2012, Дата обращения: 12 сентября 2021
  5. ↑ Обсуждение произношения названия на рассылке llvmdev Архивировано 8 февраля 2012 года.
  6. ↑ https://github.com/llvm/llvm-project/tree/main?tab=License-1-ov-file#readme
  7. ↑ GitHub (англ.) — 2007.
  8. ↑ Divacky, Roman. [ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64. Архивировано из оригинала 30 апреля 2012 года.
  9. ↑ BuildingFreeBSDWithClang — FreeBSD Wiki. Дата обращения: 17 марта 2011. Архивировано 1 октября 2012 года.
  10. ↑ Hornung, Alex. llvm/clang once more. Архивировано из оригинала 30 апреля 2012 года.
  11. ↑ DragonFlyBSD: clang. Дата обращения: 17 марта 2011. Архивировано 5 октября 2012 года.
  12. 1 2 Clang team, clang: a C language family frontend for LLVM Архивная копия от 13 марта 2011 на Wayback Machine
  13. ↑ Clang can compile LLVM and Clang. Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
  14. ↑ Clang Successfully Self-Hosts. Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
  15. ↑ HelenOS mainline changeset head,294. Архивировано из оригинала 30 апреля 2012 года.
  16. ↑ Gregor, Doug. Clang++ Builds Boost! Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
  17. ↑ Davis, Brad. FreeBSD Status Reports April - June, 2010. Архивировано из оригинала 30 апреля 2012 года.
  18. ↑ [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts) Архивировано 7 сентября 2015 года.
  19. ↑ Страница отслеживания ошибок llvm, препятствующих сборке ядра Linux. Дата обращения: 17 октября 2011. Архивировано 9 июня 2014 года.
  20. ↑ Gregor, Douglas (26 января 2011). New C++0x feature support in Clang (Mailing list). Архивировано из оригинала 30 января 2011. Дата обращения: 29 января 2011.
  21. ↑ C++ and C++'0x Support in Clang. LLVM. Архивировано из оригинала 30 апреля 2012 года.
  22. 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 года.
  23. ↑ Criswell, John. [LLVMdev] Clang + SAFECode Release Announcement (18 августа 2011). Дата обращения: 25 августа 2011. Архивировано из оригинала 30 апреля 2012 года.
  24. ↑ Building LibreOffice with Clang (22 октября 2011). Дата обращения: 23 октября 2011. Архивировано из оригинала 30 апреля 2012 года.
  25. ↑ Ledru, Sylvestre. Rebuild of the Debian archive with clang. Архивировано из оригинала 18 июня 2012 года.
  26. ↑ Minix 3.2.0, Releases. Clang is the default compiler. Архивировано из оригинала 18 июня 2012 года.
  27. ↑ Gerzo, Daniel. FreeBSD Quarterly Status Report January-March, 2012. Архивировано из оригинала 30 июня 2012 года.
  28. ↑ OpenNews: Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang. Дата обращения: 16 июля 2012. Архивировано из оригинала 18 июля 2012 года.
  29. ↑ Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*! Дата обращения: 22 апреля 2013. Архивировано 24 сентября 2019 года.
  30. ↑ Архивная копия от 30 января 2017 на Wayback Machine [llvm-project] Revision 194194
  31. ↑ Rebuild of Debian using Clang 3.5.0. sylvestre.ledru.info. Дата обращения: 6 мая 2016. Архивировано 19 апреля 2016 года.
  32. ↑ Nagy, Robert (26 июля 2017). switch the default compiler on amd64 and i386 to clang (Mailing list). Архивировано 25 октября 2018. Дата обращения: 30 сентября 2017.
  33. ↑ Clang is now used to build Chrome for Windows. Дата обращения: 6 марта 2018. Архивировано 5 марта 2018 года.
  34. ↑ Divacky, Roman. [Announce] clang/llvm can compile booting FreeBSD kernel on i386/amd64 (25 февраля 2009). Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
  35. ↑ Building FreeBSD with Clang, Wiki.freebsd.org, 24 августа 2012, Архивировано 30 апреля 2018, Дата обращения: 18 сентября 2012
  36. ↑ Hornung, Alex. llvm/clang once more. Дата обращения: 30 апреля 2018. Архивировано 30 апреля 2018 года.
  37. ↑ Clang, DragonFly BSD, Архивировано 30 апреля 2018, Дата обращения: 18 сентября 2012
  38. ↑ Clang can compile LLVM and Clang. LLVM Project Blog (24 декабря 2009). Дата обращения: 31 декабря 2009. Архивировано 26 апреля 2012 года.
  39. ↑ Clang Successfully Self-Hosts. LLVM Project Blog (4 февраля 2010). Дата обращения: 5 февраля 2010. Архивировано 26 апреля 2012 года.
  40. ↑ Gregor, Doug. Clang++ Builds Boost! LLVM Project Blog (20 мая 2010). Дата обращения: 21 мая 2010. Архивировано 26 апреля 2012 года.
  41. ↑ Davis, Brad. FreeBSD Status Reports April–June, 2010. Дата обращения: 30 апреля 2018. Архивировано 24 июня 2018 года.
  42. ↑ Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts), Lists.cs.uiuc.edu, Архивировано из оригинала 7 сентября 2015, Дата обращения: 18 сентября 2012
  43. ↑ Gregor, Douglas (26 января 2011). New C++0x feature support in Clang (Mailing list). Архивировано из оригинала 30 января 2011. Дата обращения: 29 января 2011.
  44. ↑ C++ and C++'0x Support in Clang. LLVM. Дата обращения: 12 марта 2023. Архивировано 4 июля 2013 года.
  45. ↑ Sonnenberger, Jörg. Status of NetBSD and LLVM (19 января 2012). Дата обращения: 26 февраля 2014. Архивировано из оригинала 21 сентября 2016 года.
  46. ↑ Ledru, Sylvestre. Rebuild of the Debian archive with clang. Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
  47. ↑ Official Minix 3 website: News. Дата обращения: 7 декабря 2012. Архивировано 17 декабря 2009 года.
  48. ↑ Gerzo, Daniel (12 мая 2012). FreeBSD Quarterly Status Report January–March, 2012 (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 14 мая 2012.
  49. ↑ Davis, Brooks (5 ноября 2012). Heads Up: Clang now the default on x86 (Mailing list). Архивировано 30 апреля 2018. Дата обращения: 7 ноября 2012.
  50. ↑ Webster, Behan. LLVMLinux: Compiling Android with LLVM (18 февраля 2013). Дата обращения: 11 мая 2013. Архивировано из оригинала 12 мая 2014 года.
  51. ↑ Tinti, Vinicius. LLVMLinux: Nexus 7 (17 марта 2013). Дата обращения: 11 мая 2013. Архивировано из оригинала 11 июня 2014 года.
  52. ↑ Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*! Дата обращения: 20 апреля 2013. Архивировано 24 сентября 2019 года.
  53. ↑ [llvm-project] Revision 194194. Дата обращения: 30 апреля 2018. Архивировано из оригинала 18 ноября 2018 года.
  54. ↑ Ledru, Sylvestre. Rebuild of Debian using Clang 3.5.0. Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
  55. ↑ NDK Revision History | Android Developers (англ.). developer.android.com. Дата обращения: 6 марта 2018. Архивировано 6 марта 2018 года.
  56. ↑ NDK Revision History | Android NDK | Android Developers (англ.). Android Developers. Дата обращения: 30 апреля 2018. Архивировано 5 апреля 2019 года.
  57. ↑ Nagy, Robert (26 июля 2017). switch the default compiler on amd64 and i386 to clang (Mailing list). Архивировано 25 октября 2018. Дата обращения: 30 сентября 2017.
  58. ↑ Kettenis, Mark (19 января 2018). Switch the default compiler on armv7 to clang (Mailing list). Архивировано 8 апреля 2022. Дата обращения: 27 августа 2020.
  59. ↑ Clang is now used to build Chrome for Windows. blog.llvm.org (5 марта 2018). Дата обращения: 7 апреля 2018. Архивировано 5 марта 2018 года.
  60. ↑ Firefox Beta 63.0beta, See All New Features, Updates and Fixes (англ.). www.mozilla.org. Дата обращения: 18 марта 2020. Архивировано 19 апреля 2021 года.
  61. ↑ Hankala, Visa (1 июля 2019). Switch the default compiler on octeon to clang (Mailing list). Архивировано 8 апреля 2022. Дата обращения: 27 августа 2020.
  62. ↑ LLVM 9 Releases With Official RISC-V Target Support, Asm Goto, Clang 9, And More. riscv.org (26 сентября 2019). Дата обращения: 26 сентября 2019. Архивировано 28 декабря 2019 года.
  63. ↑ FreeBSD svn commit r358454 (29 февраля 2020). Дата обращения: 7 марта 2020. Архивировано 10 марта 2020 года.
  64. ↑ Kettenis, Mark (2 апреля 2020). Switch the default compiler on powerpc to clang (Mailing list). Архивировано 8 апреля 2022. Дата обращения: 27 августа 2020.
  65. ↑ Hankala, Visa (21 декабря 2020). Make clang the default compiler on loongson (Mailing list). Архивировано 13 января 2021. Дата обращения: 1 января 2021.
  66. ↑ Korinsky, Kirill A. (20 августа 2026). sys/sparc64: switch the base to LLVM toolchain (Mailing list). Архивировано 26 августа 2026. Дата обращения: 25 августа 2026.