Clang

Clang
Логотип программы Clang
Скриншот программы Clang
Тип компилятор
Автор Крис Латтнер
Разработчики Apple Inc., Microsoft, Google, ARM Limited, Sony, Intel и Advanced Micro Devices
Написана на C++[3] и Си
Операционные системы Unix-подобная операционная система, Linux, GNU/Linux, OpenBSD, NetBSD, FreeBSD, DragonFly BSD и Миникс 3
Дата выпуска 26 сентября 2007
Аппаратные платформы кроссплатформенность, Linux, FreeBSD, NetBSD, OpenBSD, Миникс 3, DragonFly BSD, BSD, X86, x86-64, RISC-V, ARM architecture, PowerPC и WebAssembly
Последняя версия
Кандидат в релизы
Репозиторий github.com/llvm/llvm-pro…
Состояние Активное
Лицензия открытая лицензия Иллинойсского университета[4][5][…] и Apache License v2.0 with LLVM Exceptions[6]
Сайт clang.llvm.org (англ.)
Логотип Викисклада Медиафайлы на Викискладе

Clang (произносится «клэнг»[7]) является фронтендом для языков программирования 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++
Операционные системы кроссплатформенность, Windows и Linux
Репозиторий github.com/llvm/llvm-pro…
Лицензия Apache License 2.0[8]
Сайт clangd.llvm.org (англ.)

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

clang-format

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

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

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

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

Дата Событие
25 февраля 2009 Clang/LLVM позволяют скомпилировать ядро FreeBSD[9][10]. Сейчас весь исходный код FreeBSD — как ядро, так и пользовательские программы — может быть скомпилирован с помощью Clang.
16 марта 2009 Clang/LLVM компилирует работоспособное ядро DragonFly BSD[11][12].
23 октября 2009 Clang 1.0 впервые выпущен в составе LLVM 2.6.
Декабрь 2009 Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор libstdc++ из GCC 4.2 и генерировать работоспособный код для нетривиальных программ[13], а также компилирует себя[14].
2 февраля 2010 Clang осуществил self-hosting (скомпилировал работоспособную версию clang+llvm)[15].
20 февраля 2010 Исходный код HelenOS был изменён для успешной компиляции с помощью Clang и прошёл все регрессионные тесты для ядра и пользовательских программ на платформе IA-32[16].
20 мая 2010 Последняя версия Clang успешно собирает Boost и проходит большинство тестов[17].
10 июня 2010 Clang и LLVM становятся частью FreeBSD (хотя компилятором по умолчанию остаётся GCC)[18].
25 октября 2010 Clang/LLVM успешно компилирует ядро Linux (частично)[19]. До полной поддержки остаётся исправить несколько ошибок в clang[20] и избавиться от некоторых gnu-специфичных конструкций в ядре.
Январь 2011 Проведена предварительная работа по поддержке черновика стандарта C++0x, в разрабатываемой версии Clang поддерживаются некоторые новые возможности[21][22].
10 февраля 2011 Clang успешно компилирует виртуальную машину Java HotSpot[23].
18 августа 2011 Неофициальная версия Clang с поддержкой SafeCode, технологией отслеживания возможных проблем при работе с памятью в разрабатываемом приложении[24].
22 октября 2011 Обеспечена возможность сборки LibreOffice компилятором Clang[25].
28 февраля 2012 Clang 3.0 смог скомпилировать более 91 % пакетов Debian[26].
29 февраля 2012 Clang стал основным компилятором для Minix 3[27].
12 мая 2012 Объявлено о замене GCC на Clang в базовой системе FreeBSD[28].
14 июля 2012 Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang[29].
19 апреля 2013 Объявлено о поддержке Clang’ом стандарта языка C++11[30].
18 июня 2013 Релиз Clang 3.3 поддерживает 100 % возможностей C++11.
07 ноября 2013 Clang поддерживает 100 % возможностей C++14[31].
11 сентября 2014 С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC[32].
13 марта 2017 Clang 4.0.0 Релиз.
26 июля 2017 Clang становится компилятором по умолчанию в OpenBSD 6.2.[33].
7 сентября 2017 Clang 5.0.0 Релиз.
5 марта 2018 Clang становится компилятором по умолчанию сборок Google Chrome для всех поддерживаемых платформ.[34]
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 Релиз

Примечания

  1. ↑ LLVM 21.1.8 — 2025.
  2. ↑ LLVM 22.1.0-rc3 — 2026.
  3. ↑ The clang Open Source Project on Open Hub: Languages Page — 2006.
  4. ↑ http://clang.llvm.org/features.html
  5. ↑ http://llvm.org/svn/llvm-project/cfe/trunk/LICENSE.TXT
  6. ↑ https://github.com/llvm/llvm-project/commit/469bdefd448b76c5adcdd67256e9a44fabf7e027 — 2019.
  7. ↑ Обсуждение произношения названия на рассылке llvmdev Архивировано 8 февраля 2012 года.
  8. ↑ 1 2 https://github.com/llvm/llvm-project/tree/main?tab=License-1-ov-file#readme
  9. ↑ Divacky, Roman. [ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64. Архивировано из оригинала 30 апреля 2012 года.
  10. ↑ BuildingFreeBSDWithClang — FreeBSD Wiki. Дата обращения: 17 марта 2011. Архивировано 1 октября 2012 года.
  11. ↑ Hornung, Alex. llvm/clang once more. Архивировано из оригинала 30 апреля 2012 года.
  12. ↑ DragonFlyBSD: clang. Дата обращения: 17 марта 2011. Архивировано 5 октября 2012 года.
  13. ↑ Clang team, clang: a C language family frontend for LLVM Архивная копия от 13 марта 2011 на Wayback Machine
  14. ↑ Clang can compile LLVM and Clang. Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
  15. ↑ Clang Successfully Self-Hosts. Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
  16. ↑ HelenOS mainline changeset head,294. Архивировано из оригинала 30 апреля 2012 года.
  17. ↑ Gregor, Doug. Clang++ Builds Boost! Блог проекта LLVM. Архивировано из оригинала 30 апреля 2012 года.
  18. ↑ Davis, Brad. FreeBSD Status Reports April - June, 2010. Архивировано из оригинала 30 апреля 2012 года.
  19. ↑ [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts) Архивировано 7 сентября 2015 года.
  20. ↑ Страница отслеживания ошибок llvm, препятствующих сборке ядра Linux. Дата обращения: 17 октября 2011. Архивировано 9 июня 2014 года.
  21. ↑ Gregor, Douglas (26 января 2011). New C++0x feature support in Clang (Mailing list). Архивировано из оригинала 30 января 2011. Дата обращения: 29 января 2011.
  22. ↑ C++ and C++'0x Support in Clang. LLVM. Архивировано из оригинала 30 апреля 2012 года.
  23. ↑ 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 года.
  24. ↑ Criswell, John. [LLVMdev] Clang + SAFECode Release Announcement (18 августа 2011). Дата обращения: 25 августа 2011. Архивировано из оригинала 30 апреля 2012 года.
  25. ↑ Building LibreOffice with Clang (22 октября 2011). Дата обращения: 23 октября 2011. Архивировано из оригинала 30 апреля 2012 года.
  26. ↑ Ledru, Sylvestre. Rebuild of the Debian archive with clang. Архивировано из оригинала 18 июня 2012 года.
  27. ↑ Minix 3.2.0, Releases. Clang is the default compiler. Архивировано из оригинала 18 июня 2012 года.
  28. ↑ Gerzo, Daniel. FreeBSD Quarterly Status Report January-March, 2012. Архивировано из оригинала 30 июня 2012 года.
  29. ↑ OpenNews: Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang. Дата обращения: 16 июля 2012. Архивировано из оригинала 18 июля 2012 года.
  30. ↑ Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*! Дата обращения: 22 апреля 2013. Архивировано 24 сентября 2019 года.
  31. ↑ [1]Архивная копия от 30 января 2017 на Wayback Machine [llvm-project] Revision 194194
  32. ↑ Rebuild of Debian using Clang 3.5.0. sylvestre.ledru.info. Дата обращения: 6 мая 2016. Архивировано 19 апреля 2016 года.
  33. ↑ Nagy, Robert (26 июля 2017). switch the default compiler on amd64 and i386 to clang (Mailing list). Архивировано 25 октября 2018. Дата обращения: 30 сентября 2017.
  34. ↑ Clang is now used to build Chrome for Windows. Дата обращения: 6 марта 2018. Архивировано 5 марта 2018 года.

Ссылки