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

Clang

Материал из Википедии — свободной энциклопедии
Clang
Скриншот программы Clang
Скриншот информации о версии Clang 21.1.7 и подробной информации о компиляции, а также скомпилированной программы
Тип Интерфейс компилятора
Автор Крис Латтнер[англ.]
Разработчик LLVM Developer Group
Написана на C++
Операционная система Unix-подобная
Дата выпуска 26 сентября 2007; 18 лет назад (2007-09-26)[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
Тип открытое программное обеспечение
Написана на 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[6]
Сайт clang.llvm.org (англ.)

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

Примечания

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