Clang

Материал из Википедии — свободной энциклопедии
Текущая версия страницы покане проверялась опытными участниками и может значительно отличаться отверсии, проверенной 12 октября 2024 года; проверки требуют42 правки.
Перейти к навигацииПерейти к поиску
Clang
Логотип программы Clang
Скриншот программы Clang
ТипКомпилятор
АвторКрис Латтнер
РазработчикиApple и другие
Написана наC++
Операционная системаКроссплатформенное программное обеспечение
Первый выпуск26 сентября 2007
Аппаратные платформыкроссплатформенность, Linux, FreeBSD, NetBSD, OpenBSD, Миникс 3, DragonFly BSD, BSD, X86, x86-64, RISC-V, ARM, PowerPC и WebAssembly
Последняя версия18.1.8[1] (18 июня 2024; 8 месяцев назад (2024-06-18))
Кандидат в релизы
Репозиторийgithub.com/llvm/llvm-pro…
СостояниеАктивное
Лицензиялицензия Университета Иллинойса (англ.)
Сайтclang.llvm.org
Логотип Викисклада Медиафайлы на Викискладе

Clang (произносится «клэнг»[3]) являетсяфронтендом дляязыков программирования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 . Начиная с версии V6.0.0 в Clang компилирует C++ с использованием в GNUC++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.

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

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

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

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

Примечания

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

Ссылки

[править |править код]
Источник —https://ru.wikipedia.org/w/index.php?title=Clang&oldid=141346416
Категории:
Скрытые категории: