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