Clang

Clang (произносится «клэнг»[2]) является фронтендом для языков программирования C, C++, Objective-C, Objective-C++ (англ.) и OpenCL C, использующимся совместно с фреймворком LLVM. Clang транслирует исходные коды в байт-код LLVM, затем фреймворк производит оптимизации и кодогенерацию.

Clang
Тип Компилятор
Автор Крис Латтнер
Разработчик Apple и другие
Написана на C++
Операционная система Кроссплатформенное программное обеспечение
Первый выпуск 26 сентября 2007
Аппаратная платформа кроссплатформенность
Последняя версия 13.0.1[1] (2 февраля 2022 (2022-02-02))
Состояние Активное
Лицензия лицензия Университета Иллинойса (англ.)
Сайт clang.llvm.org
 Медиафайлы на Викискладе

Целью проекта является создание замены GNU Compiler Collection (GCC). Разработка ведётся согласно концепции open source в рамках проекта LLVM.

Clang 12, последней версии от апреля 2021, имеет полную поддержку всех опубликованных стандартов C++ до С++17, реализует большинство функций C++20, и добавляет частичную поддержку разрабатываемого стандарта C++23 . Начиная с версии V6.0.0, в Clang компилирует C++ с использованием в GNU C++14 диалект по умолчанию, которое включает функции из С++14 стандарта и в соответствии с GNU расширений.

В проекте участвуют работники нескольких корпораций, в том числе Google и Apple. Исходный код доступен на условиях BSD-подобной лицензии.

Обзор

Clang — это транслятор для C-подобных языков, созданный специально для работы на базе LLVM. Комбинация Clang и LLVM представляет собой полноценный компилятор и предоставляет набор инструментов, позволяющих полностью заменить GCC. Благодаря архитектуре, основанной на библиотеках, Clang (как и LLVM) легко встраивается в другие приложения.

Одной из главных задач Clang является поддержка инкрементной компиляции, позволяющей более тесно интегрировать компилятор и графический интерфейс среды разработки, в отличие от GCC, который был создан для работы в классическом цикле «компиляция-линковка-отладка». В отличие от GCC, ориентированного преимущественно на кодогенерацию, Clang стремится предоставить универсальный фреймворк для парсинга, индексации, статического анализа и компиляции языков семейства Си. В частности, Clang не производит упрощений исходного кода на этапе парсинга (как это делает GCC), гарантируя точное воспроизведение исходного текста в абстрактное синтаксическое дерево.

В отличие от GCC, Clang изначально спроектирован для максимального сохранения информации в ходе процесса компиляции, в том числе сохранения «внешнего вида» исходного кода. Эта особенность позволяет Clang создавать развернутые контекстно-ориентированные сообщения об ошибках, понятные как для программистов, так и для сред разработки. Модульный дизайн компилятора позволяет использовать его в составе среды разработки для индексирования кода, подсветки синтаксиса и переработки кода.

Clang поддерживает большинство распространенных опций GCC.

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

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

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

Примечания

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

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.