Interested Article - Clang

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

Примечания

  1. . из оригинала 18 марта 2023 . Дата обращения: 17 марта 2023 .
  2. 8 февраля 2012 года.
  3. Divacky, Roman . Архивировано из 30 апреля 2012 года.
  4. . Дата обращения: 17 марта 2011. 1 октября 2012 года.
  5. Hornung, Alex . Архивировано из 30 апреля 2012 года.
  6. . Дата обращения: 17 марта 2011. 5 октября 2012 года.
  7. Clang team, от 13 марта 2011 на Wayback Machine
  8. . Блог проекта LLVM. Архивировано из 30 апреля 2012 года.
  9. . Блог проекта LLVM. Архивировано из 30 апреля 2012 года.
  10. . Архивировано из 30 апреля 2012 года.
  11. Gregor, Doug Блог проекта LLVM. Архивировано из 30 апреля 2012 года.
  12. Davis, Brad . Архивировано из 30 апреля 2012 года.
  13. 7 сентября 2015 года.
  14. . Дата обращения: 17 октября 2011. 9 июня 2014 года.
  15. Gregor, Douglas (26 January 2011). (Mailing list). Архивировано из 30 января 2011 . Дата обращения: 29 января 2011 .
  16. . LLVM. Архивировано из 30 апреля 2012 года.
  17. Simonis, Volker (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 (18 августа 2011). Дата обращения: 25 августа 2011. Архивировано из 30 апреля 2012 года.
  19. (22 октября 2011). Дата обращения: 23 октября 2011. Архивировано из 30 апреля 2012 года.
  20. Ledru, Sylvestre . Архивировано из 18 июня 2012 года.
  21. Minix 3.2.0, Releases . Архивировано из 18 июня 2012 года.
  22. Gerzo, Daniel . Архивировано из 30 июня 2012 года.
  23. . Дата обращения: 16 июля 2012. Архивировано из 18 июля 2012 года.
  24. Du Toit, Stefanus Дата обращения: 22 апреля 2013. 24 сентября 2019 года.
  25. от 30 января 2017 на Wayback Machine [llvm-project ] Revision 194194
  26. . sylvestre.ledru.info. Дата обращения: 6 мая 2016. 19 апреля 2016 года.
  27. Nagy, Robert (26 July 2017). (Mailing list). из оригинала 25 октября 2018 . Дата обращения: 30 сентября 2017 .
  28. . Дата обращения: 6 марта 2018. 5 марта 2018 года.

Ссылки

Источник —

Same as Clang