Русская Википедия:Clang
Clang (произносится «клэнг»[1]) является фронтендом для языков программирования 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[2][3]. Сейчас весь исходный код FreeBSD — как ядро, так и пользовательские программы — может быть скомпилирован с помощью Clang. |
16 марта 2009 | Clang/LLVM компилирует работоспособное ядро DragonFly BSD[4][5]. |
23 октября 2009 | Clang 1.0 впервые выпущен в составе LLVM 2.6. |
Декабрь 2009 | Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор libstdc++ из GCC 4.2 и генерировать работоспособный код для нетривиальных программ[6], а также компилирует себя[7]. |
2 февраля 2010 | Clang осуществил self-hosting (скомпилировал работоспособную версию clang+llvm)[8]. |
20 февраля 2010 | Исходный код HelenOS был изменён для успешной компиляции с помощью Clang и прошёл все регрессионные тесты для ядра и пользовательских программ на платформе IA-32[9]. |
20 мая 2010 | Последняя версия Clang успешно собирает Boost и проходит большинство тестов[10]. |
10 июня 2010 | Clang и LLVM становятся частью FreeBSD (хотя компилятором по умолчанию остаётся GCC)[11]. |
25 октября 2010 | Clang/LLVM успешно компилирует ядро Linux (частично)[12]. До полной поддержки остаётся исправить несколько ошибок в clang[13] и избавиться от некоторых gnu-специфичных конструкций в ядре. |
Январь 2011 | Проведена предварительная работа по поддержке черновика стандарта C++0x, в разрабатываемой версии Clang поддерживаются некоторые новые возможности[14][15]. |
10 февраля 2011 | Clang успешно компилирует виртуальную машину Java HotSpot[16]. |
18 августа 2011 | Неофициальная версия Clang с поддержкой SafeCode, технологией отслеживания возможных проблем при работе с памятью в разрабатываемом приложении[17]. |
22 октября 2011 | Обеспечена возможность сборки LibreOffice компилятором Clang[18]. |
28 февраля 2012 | Clang 3.0 смог скомпилировать более 91 % пакетов Debian[19]. |
29 февраля 2012 | Clang стал основным компилятором для Minix 3[20]. |
12 мая 2012 | Объявлено о замене GCC на Clang в базовой системе FreeBSD[21]. |
14 июля 2012 | Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang[22]. |
19 апреля 2013 | Объявлено о поддержке Clang’ом стандарта языка C++11[23]. |
18 июня 2013 | Релиз Clang 3.3 поддерживает 100 % возможностей C++11. |
07 ноября 2013 | Clang поддерживает 100 % возможностей C++14[24]. |
11 сентября 2014 | С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC[25]. |
13 марта 2017 | Clang 4.0.0 Релиз. |
26 июля 2017 | Clang становится компилятором по умолчанию в OpenBSD 6.2.[26]. |
7 сентября 2017 | Clang 5.0.0 Релиз. |
5 марта 2018 | Clang становится компилятором по умолчанию сборок Google Chrome для всех поддерживаемых платформ.[27] |
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 Релиз |
Примечания
Ссылки
- ↑ Обсуждение произношения названия на рассылке llvmdev Шаблон:Webarchive
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Clang team, clang: a C language family frontend for LLVM Шаблон:Wayback
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts) Шаблон:Webarchive
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite mailing list
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ [1]Шаблон:Wayback [llvm-project] Revision 194194
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite mailing list
- ↑ Шаблон:Cite web
- Русская Википедия
- Компиляторы
- Компиляторы Си
- Компиляторы C++
- Компиляторы Obj-C
- Статические анализаторы кода
- Программное обеспечение для macOS
- Программное обеспечение для Linux
- Свободные компиляторы и интерпретаторы
- Программное обеспечение Apple
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Википедия
- Статья из Википедии
- Статья из Русской Википедии