Найти статью
Clang
Clang (/ˈklæŋ/)[8] — фронтенд компилятора для языков программирования C, C++, Objective-C, Objective-C++, а также для программных платформ OpenMP[9], OpenCL, RenderScript, CUDA, SYCL и HIP[10]. Clang выступает в роли drop-in replacement для GNU Compiler Collection (GCC), поддерживая большинство его флагов компиляции и неофициальных расширений языка[11]. Включает статический анализатор программ, а также ряд инструментов для анализа кода[12].
Clang работает совместно с бэкендом компилятора LLVM и с версии LLVM 2.6 является его подпроектом[13]. Как и LLVM, распространяется как свободное программное обеспечение под лицензией Apache 2.0 с исключениями LLVM. В числе участников разработки — Apple, Microsoft, Google, ARM, Sony, Intel и AMD.
Проект находится в состоянии активной разработки, является зрелым и используется в промышленной эксплуатации крупными компаниями, включая Google и Apple. Clang известен своей передовой поддержкой современных стандартов языков программирования[14]. Компилятор полностью поддерживает все опубликованные стандарты C++ вплоть до C++17, реализует большинство возможностей C++20, значительную часть стандарта C++23 и включает экспериментальную поддержку возможностей будущего стандарта C++2c[15]. Также полностью реализованы стандарты языка C вплоть до C23[16]. Начиная с версии 16.0.0, Clang по умолчанию компилирует C++ в диалекте GNU++17, а C — в диалекте GNU C17[15][16].
Общие сведения
Что важно знать
| Clang | |||
|---|---|---|---|
| Тип | Фронтенд компилятора | ||
| Автор | Крис Латтнер | ||
| Разработчик | LLVM Developer Group | ||
| Написана на | C++ | ||
| Интерфейс | Интерфейс командной строки[1] | ||
| Операционная система | Unix-подобные | ||
| Языки интерфейса | английский[2] | ||
| Первый выпуск | 26 сентября 2007[3] | ||
| Аппаратные платформы | AArch64, ARMv7, IA-32, x86-64, ppc64le[4] | ||
| Последняя версия | 21.1.1[5] (10 сентября 2025[5]) | ||
| Тестовая версия | preferred (preferred) | ||
| Репозиторий | [5] github.com/llvm/llvm-pro… | ||
| |||
| |||
| Состояние | Активная разработка[7] | ||
| Лицензия | Apache 2.0 с исключениями LLVM | ||
| Сайт | clang.llvm.org | ||
Предпосылки
В 2005 году компания Apple активно использовала LLVM в ряде коммерческих продуктов[17], включая iOS SDK и Xcode 3.1. Одним из первых применений LLVM стал компилятор кода OpenGL для OS X, преобразующий вызовы OpenGL в более базовые вызовы для графических процессоров (GPU), не поддерживающих определённые функции. Это позволило Apple реализовать поддержку OpenGL на компьютерах с чипсетами Intel GMA, повысив производительность таких устройств[18].
Изначально проект LLVM планировал использовать фронтенд GCC. Однако исходный код GCC велик и довольно громоздок; как выразился один из давних разработчиков GCC относительно LLVM: «Заставить бегемота танцевать — не самое весёлое занятие»[19]. Кроме того, программное обеспечение Apple использует Objective-C, который не является приоритетом для разработчиков GCC. В результате GCC не интегрируется должным образом в интегрированную среду разработки (IDE) Apple[20]. Наконец, лицензионное соглашение GCC, GNU General Public License (GPL) версии 3, обязывает разработчиков, распространяющих расширения или модифицированные версии GCC, публиковать их исходный код, тогда как разрешительная лицензия LLVM этого не требует.
По этим причинам Apple разработала Clang — новый фронтенд компилятора с поддержкой C, Objective-C и C++[20]. В июле 2007 года проект получил одобрение на открытие исходного кода[21].
Архитектура
Clang является фронтендом в рамках модульной системы компиляции LLVM, поэтому некорректно выделять в нём единый «программный движок». Основная задача Clang — лексический, синтаксический и семантический анализ исходного кода, результатом которого является промежуточное представление (Intermediate Representation, IR)[22]. Это представление затем передаётся бэкенду — ядру LLVM, которое отвечает за оптимизацию кода и генерацию машинных инструкций для целевой аппаратной платформы[23].
Ключевой особенностью Clang является его модульная архитектура, основанная на библиотеках[24]. Она позволяет использовать Clang не только для компиляции, но и для создания широкого спектра инструментов, таких как статические анализаторы (например, clang-tidy), средства форматирования (clang-format) и рефакторинга кода, а также для тесной интеграции с IDE[24]. В отличие от этого, GCC исторически развивался как более монолитный набор программ, работающий по схеме компиляция-линковка-отладка, что усложняло его интеграцию с другими инструментами. Например, GCC использует этап fold, который преобразует дерево кода в форму, отличную от исходного кода. Если ошибка обнаружена во время или после этого этапа, её сложно сопоставить с местом в исходном коде.
Clang сохраняет больше информации в процессе компиляции, чем GCC, и поддерживает структуру исходного кода, что облегчает сопоставление ошибок с исходным текстом. Сообщения об ошибках Clang более подробные, специфичные и машиночитаемые, что позволяет IDE индексировать вывод компилятора. Дерево разбора также лучше подходит для автоматического рефакторинга, так как напрямую отражает исходный код.
Clang компилирует только языки семейства C: C, C++, Objective-C и Objective-C++. Во многих случаях Clang может заменить GCC без изменений в остальной части инструментальной цепочки. Проект фронтенда для языка Fortran, Flang, также достиг зрелости и с 2025 года поставляется как основной компилятор Fortran в составе LLVM, заменив предыдущую экспериментальную версию[25][26]. Для других языков, например Ada, LLVM по-прежнему зависит от GCC или другого фронтенда компилятора.
Flang — Fortran
Проект фронтенда для языка Fortran, Flang, достиг значительной зрелости. В 2024 году было принято решение отказаться от названия экспериментальной версии flang-new и официально переименовать компилятор в flang, что отражает его готовность к промышленному использованию. Это изменение вступило в силу с выпуском LLVM 20, а релиз LLVM 20.1 в марте 2025 года стал первым, в котором компилятор поставляется под именем flang[27]. Современный Flang, основанный на фронтенде F18 и MLIR, полностью интегрирован в основной проект LLVM и активно развивается при поддержке таких компаний, как NVIDIA, Arm, AMD и IBM[27].
По состоянию на 2025 год, Flang обеспечивает следующую поддержку стандартов Fortran:
- Fortran 95: поддержка практически полная[28].
- Fortran 2003: реализовано большинство возможностей, включая полную поддержку полиморфных типов[28].
- Fortran 2008 и Fortran 2018: поддерживается множество функций, однако ключевые возможности для параллельных вычислений (coarrays) и параметризованные производные типы (PDT) пока не реализованы[29].
- Fortran 2023: добавлена начальная поддержка отдельных нововведений, таких как тригонометрические функции, работающие с градусами[29].
В области параллельного программирования Flang обеспечивает полную поддержку стандарта OpenMP 3.1[30][31]. Также реализована частичная поддержка более новых версий стандарта (4.0 и выше)[30]. Работа над выгрузкой вычислений на GPU (CUDA и OpenMP offload) продолжается, но на данный момент эта функциональность считается экспериментальной[32].
Текущее состояние
Компилятор Clang находится в состоянии активной разработки и является зрелым, высокопроизводительным инструментом, который используется в промышленной эксплуатации для сборки критически важного программного обеспечения, такого как Google Chrome и Firefox[33].
Clang известен своей передовой поддержкой современных стандартов языков программирования. Компилятор полностью поддерживает все опубликованные стандарты C++ вплоть до C++17, реализует большинство возможностей C++20 и значительную часть стандарта C++23. Также ведётся активная работа по реализации экспериментальных возможностей будущего стандарта C++2c.
Ключевыми целями проекта являются высокая скорость компиляции, низкое потребление памяти и предоставление качественной диагностики[33]. Одной из главных особенностей Clang считаются выразительные и точные сообщения об ошибках и предупреждениях, которые помогают разработчикам быстрее находить и исправлять проблемы в коде. Его модульная архитектура, основанная на библиотеках, позволяет легко интегрировать компилятор с различными инструментами, такими как IDE, статические анализаторы и средства рефакторинга[33]. Обеспечивается высокая степень совместимости с опциями и расширениями компилятора GCC[33]. Кроме того, достигнут значительный прогресс в обеспечении возможности сборки ядра Linux с помощью Clang[34].
Поддерживаемые форматы
Clang способен обрабатывать исходные файлы на различных языках программирования и генерировать файлы нескольких форматов на разных этапах компиляции. Управление входными и выходными форматами осуществляется с помощью флагов командной строки.
Входные форматы (языки программирования)
Clang обрабатывает исходный код на следующих языках и для следующих платформ:
- C: Поддерживаются стандарты от K&R C до C23. По умолчанию используется диалект GNU C17.
- C++: Полностью реализованы стандарты до C++17, большинство возможностей C++20 и значительная часть C++23[35]. По умолчанию используется диалект GNU++17.
- Objective-C и Objective-C++: Clang является компилятором по умолчанию для этих языков в среде разработки Xcode[36].
- OpenCL: Поддерживаются версии языка с 1.0 по 3.0, а также «C++ для OpenCL».
- CUDA: Поддерживается компиляция кода для платформы CUDA от NVIDIA[37].
- Другие платформы, включая OpenMP, RenderScript, SYCL и HIP.
Выходные форматы
В зависимости от указанных опций, Clang может генерировать следующие типы файлов:
- Исполняемый файл: Конечный результат компиляции по умолчанию. Создаётся при помощи опции
-o <имя_файла>[38]. - Объектный файл (
.o,.obj): Содержит скомпилированный, но ещё не скомпонованный машинный код. Генерируется с помощью флага-c[39]. - Ассемблерный код (
.s): Текстовое представление машинных инструкций. Создаётся с помощью флага-S[39]. - Промежуточное представление LLVM (LLVM IR): Внутреннее представление кода, используемое для оптимизации. Может быть сохранено в двух формах:
- Препроцессированный исходный код (
.iдля C,.iiдля C++): Исходный код после обработки директив препроцессора (#include,#defineи т. д.). Генерируется с помощью флага-E[39]. - Абстрактное синтаксическое дерево (AST): Сериализованное внутреннее представление кода, используемое инструментами для анализа и рефакторинга. Создаётся с помощью флага
-emit-ast[40].
Исходный код и ресурсы
Основной репозиторий исходного кода для Clang и всей экосистемы LLVM размещается на платформе GitHub в виде единого репозитория (монорепозитория) `llvm-project`[41]. В нём находится исходный код для LLVM, Clang, компоновщика LLD, стандартной библиотеки C++ (libc++) и других подпроектов[41].
Официальные релизы проекта публикуются на двух основных ресурсах:
- Страница релизов на GitHub, где доступны архивы с исходным кодом и предварительно скомпилированные бинарные файлы для различных операционных систем.
- Официальный сайт releases.llvm.org, который предоставляет структурированный доступ к выпускам, включая подробные примечания к каждому релизу (release notes) и документацию[42].
Логотип
Поскольку Clang является частью проекта LLVM, он использует его официальный логотип. Логотип представляет собой стилизованное изображение виверны (разновидности дракона) фиолетового цвета. Этот образ является отсылкой к влиятельной серии книг по теории компиляторов, известной в сообществе как «Книги Дракона» (Dragon Books), на обложках которых традиционно изображался дракон. Авторские права на логотип принадлежат компании Apple Inc.[43].
Производительность и совместимость с GCC
Clang совместим с GCC[44]. Его интерфейс командной строки поддерживает многие флаги и опции GCC. Clang реализует множество расширений языка GNU и intrinsics, часть которых предназначена исключительно для совместимости. Например, хотя Clang реализует атомарные intrinsics, полностью соответствующие C11 атомикам, он также поддерживает GCC-интринсики __sync_* для совместимости с GCC и libstdc++. Clang также поддерживает ABI с объектным кодом, сгенерированным GCC. На практике Clang может выступать в роли полной замены GCC[45].
Разработчики Clang стремятся уменьшить потребление памяти и повысить скорость компиляции по сравнению с другими компиляторами, такими как GCC. В октябре 2007 года сообщалось, что Clang компилирует библиотеки Carbon более чем в два раза быстрее GCC, используя примерно одну шестую памяти и дискового пространства по сравнению с GCC[46]. К 2011 году Clang сохранял это преимущество по производительности компилятора[47].[48] По состоянию на середину 2014 года Clang по-прежнему компилировал быстрее GCC в смешанных тестах времени компиляции и производительности программ[49]. Однако к 2019 году Clang стал заметно медленнее GCC при компиляции ядра Linux, оставаясь немного быстрее при компиляции LLVM[50]. Тенденция превосходства Clang в скорости компиляции сохранилась и в 2024 году: тесты показали, что Clang 18 компилирует проект PostgreSQL примерно в два раза быстрее, чем GCC 14[51].
Хотя исторически Clang был быстрее GCC при компиляции, качество генерируемого кода отставало. По состоянию на 2014 год производительность программ, скомпилированных Clang, уступала аналогичным программам, собранным GCC, иногда значительно (до 5,5 раз)[49], что подтверждали и более ранние отчёты[47]. Оба компилятора развивались, сокращая разрыв:
- Сравнения в ноябре 2016 года между GCC 4.8.2 и clang 3.4 на большом наборе тестовых файлов показали, что GCC опережает clang примерно на 17 % при хорошо оптимизированном исходном коде. Результаты зависят от кода, и для не оптимизированного C-кода разница может быть обратной. В целом компиляторы сопоставимы[52].
- Сравнения 2019 года на Intel Ice Lake показали, что программы, сгенерированные Clang 10, достигли 96 % производительности GCC 10 по 41 различному тесту (22 победы и 19 поражений)[50].
- Другое сравнение, проведённое в 2023 году, показало, что программы, скомпилированные Clang, теперь сопоставимы по производительности с программами, собранными GCC. В среднем Clang 16 опережает GCC 13 на 6 %[53].
- К 2024 году производительность сгенерированного кода стала крайне конкурентной. Масштабное тестирование на 130 различных задачах показало, что GCC 14 и Clang 18 демонстрируют практически идентичные результаты, а итоговый результат был охарактеризован как «ничья» (dead heat). Выбор лидера сильно зависит от конкретной рабочей нагрузки[54].
Интерфейс
Clang предоставляет несколько интерфейсов для взаимодействия: основной — интерфейс командной строки (CLI), программный — через библиотеку `libclang`, а также опосредованный — через интеграцию в графические среды разработки.
Интерфейс командной строки
Основным способом использования Clang является запуск компилятора из терминала с передачей различных флагов и опций. Clang поддерживает большинство опций командной строки GCC, что позволяет использовать его в качестве прямой замены в существующих сборочных системах. Для совместимости с компилятором Microsoft Visual C++ (cl.exe) существует специальный драйвер `clang-cl`.
Все диагностические сообщения (ошибки, предупреждения) и документация Clang предоставляются только на английском языке. Несмотря на то, что архитектура компилятора была спроектирована с учётом возможности локализации, на практике эта функция не была реализована, и сообщения жёстко закодированы в исходном коде.
Программный интерфейс (libclang)
Библиотека `libclang` предоставляет стабильный API на языке C, который позволяет встраивать возможности Clang в другие приложения. Её функции включают разбор исходного кода в AST, загрузку ранее сохранённого AST, обход дерева и сопоставление элементов AST с позициями в исходном коде.
Интеграция со средами разработки
Хотя Clang не имеет собственного графического интерфейса, его модульная, основанная на библиотеках архитектура делает его удобным для интеграции в IDE и редакторы кода. Инструменты на базе Clang используются «под капотом» для реализации таких функций, как компиляция, автодополнение кода, статический анализ и рефакторинг. Примерами такой интеграции являются:
- Xcode: Clang является компилятором по умолчанию для языков C, C++ и Objective-C.
- Visual Studio: Clang можно использовать в качестве набора инструментов для сборки проектов, выбрав опцию LLVM (clang-cl).
- CLion, Qt Creator и другие IDE на базе C++ активно используют Clang для анализа кода[55].
- Visual Studio Code: Многочисленные расширения интегрируют инструменты на базе Clang (например, `clangd` для языкового сервера или `clang-tidy` для статического анализа) для предоставления разработчику интерактивной обратной связи[55].
История версий
В таблице приведены только ключевые этапы и релизы в истории Clang.
| Дата | Основные события |
|---|---|
| 11 июля 2007 | Фронтенд Clang выпущен под открытой лицензией |
| 25 февраля 2009 | Clang/LLVM может компилировать рабочее ядро FreeBSD[56][57] |
| 16 марта 2009 | Clang/LLVM может компилировать рабочее ядро DragonFly BSD[58][59] |
| 23 октября 2009 | Выпуск Clang 1.0, впервые с LLVM 2.6 |
| Декабрь 2009 | Генерация кода для C и Objective-C достигла промышленного качества. Поддержка C++ и Objective-C++ ещё не полная. Clang C++ может разбирать GCC 4.2 libstdc++ и генерировать рабочий код для нетривиальных программ, и способен компилировать сам себя[60]. |
| 2 февраля 2010 | Clang self-hosting[61]. |
| 20 мая 2010 | Последняя версия Clang успешно собирает библиотеки Boost C++ и проходит почти все тесты[62]. |
| 10 июня 2010 | Clang/LLVM становится частью FreeBSD, но компилятор по умолчанию — GCC[63]. |
| 25 октября 2010 | Clang/LLVM может компилировать рабочее модифицированное ядро Linux[64]. |
| Январь 2011 | Завершена предварительная поддержка черновика стандарта C++0x, часть новых возможностей поддерживается в версии Clang для разработчиков[65].[66] |
| 10 февраля 2011 | Clang может компилировать рабочую HotSpot виртуальную машину Java. |
| 19 января 2012 | Clang становится опциональным компонентом в кроссплатформенной системе сборки NetBSD, по умолчанию — GCC[67]. |
| 29 февраля 2012 | Clang 3.0 может пересобрать 91,2 % архива Debian[68]. |
| 29 февраля 2012 | Clang становится компилятором по умолчанию в MINIX 3[69] |
| 12 мая 2012 | Объявлено о замене GCC на Clang/LLVM в FreeBSD[70]. |
| 5 ноября 2012 | Clang становится компилятором по умолчанию в FreeBSD 10.x на amd64/i386[71]. |
| 18 февраля 2013 | Clang/LLVM может компилировать рабочее модифицированное ядро Android Linux Kernel для Nexus 7[72].[73] |
| 19 апреля 2013 | Clang полностью поддерживает стандарт C++11[74]. |
| 6 ноября 2013 | Clang полностью поддерживает стандарт C++14[75]. |
| 11 сентября 2014 | Clang 3.5 может пересобрать 94,3 % архива Debian. Доля неудачных сборок снижается на 1,2 % за релиз с января 2013 года, в основном за счёт лучшей совместимости с флагами GCC[76]. |
| Октябрь 2016 | Clang становится компилятором по умолчанию для Android[77] (а позднее — единственным поддерживаемым компилятором Android NDK[78]). |
| 13 марта 2017 | Clang 4.0.0 выпущен |
| 26 июля 2017 | Clang становится компилятором по умолчанию в OpenBSD 6.2 на amd64/i386[79]. |
| 7 сентября 2017 | Clang 5.0.0 выпущен |
| 19 января 2018 | Clang становится компилятором по умолчанию в OpenBSD 6.3 на arm[80]. |
| 5 марта 2018 | Clang теперь используется для сборки Google Chrome для Windows[81]. |
| 8 марта 2018 | Clang 6.0.0 выпущен |
| 5 сентября 2018 | Clang теперь используется для сборки Firefox для Windows[82]. |
| 19 сентября 2018 | Clang 7.0.0 выпущен |
| 20 марта 2019 | Clang 8.0.0 выпущен |
| 1 июля 2019 | Clang становится компилятором по умолчанию в OpenBSD 6.6 на mips64[83]. |
| 19 сентября 2019 | Clang 9.0.0 выпущен с официальной поддержкой RISC-V[84]. |
| 29 февраля 2020 | Clang становится единственным компилятором C в базовой системе FreeBSD после удаления GCC[85]. |
| 24 марта 2020 | Clang 10.0.0 выпущен |
| 2 апреля 2020 | Clang становится компилятором по умолчанию в OpenBSD 6.7 на powerpc[86]. |
| 12 октября 2020 | Clang 11.0.0 выпущен |
| 21 декабря 2020 | Clang становится компилятором по умолчанию в OpenBSD 6.9 на mips64el[87]. |
| 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 выпущен |
| 9 сентября 2023 | Clang 17.0.1 выпущен |
| 20 июня 2024 | Clang 18.1.8 выпущен |
| 17 сентября 2024 | Clang 19.1.0 выпущен |
| 4 марта 2025 | Clang 20.1.0 |
| 26 августа 2025 | Clang 21.1.0 выпущен |
| 10 сентября 2025 | Clang 21.1.1 выпущен |
Примечания
- ↑ 1 2 Clang Compiler User’s Manual. LLVM Developer Group. Дата обращения: 17 сентября 2025.
- ↑ Clang Internals Manual. LLVM Developer Group. Дата обращения: 17 сентября 2025.
- ↑ LLVM 2.1 Release Notes. llvm.org. LLVM Developer Group (27 сентября 2007). Дата обращения: 30 апреля 2018. Архивировано 17 ноября 2016 года.
- ↑ Releases. llvm – llvm-project repo. LLVM Developer Group (27 августа 2021). Дата обращения: 12 сентября 2021. Архивировано 12 сентября 2021 года.
- ↑ 1 2 3 Releases · llvm/llvm-project. GitHub. Дата обращения: 17 сентября 2025.
- ↑ clang: tldr-страницы. 900913.ru. Дата обращения: 17 сентября 2025.
- ↑ Clang: a C language family frontend for LLVM. LLVM Developer Group. Дата обращения: 17 сентября 2025.
- ↑ Christopher, Eric simply wonder pronunciation of Clang. Список рассылки (3 июля 2008).
- ↑ OpenMP Support. LLVM Project Blog (22 мая 2015). Дата обращения: 28 марта 2016. Архивировано 26 марта 2016 года.
- ↑ C++ Heterogeneous-Compute Interface for Portability. GitHub. Дата обращения: 18 февраля 2020. Архивировано 27 июня 2020 года.
- ↑ Clang Language Extensions. — «In addition to the language extensions listed here, Clang aims to support a broad range of GCC extensions.» Дата обращения: 8 ноября 2017. Архивировано 24 февраля 2014 года.
- ↑ Clang Static Analyzer. LLVM. Дата обращения: 3 сентября 2009. Архивировано 30 апреля 2018 года.
- ↑ Getting Involved with the Clang Project, LLVM Developer Group, <https://clang.llvm.org/get_involved.html>. Проверено 18 сентября 2012.
- ↑ Clang. Security Lab. Дата обращения: 17 сентября 2025.
- ↑ 1 2 C++ Support in Clang. LLVM Developer Group. Дата обращения: 17 сентября 2025.
- ↑ 1 2 Clang C Language Compatibility. clang.llvm.org. LLVM Developer Group. Дата обращения: 17 сентября 2025.
- ↑ Treat, Adam mkspecs and patches for LLVM compile of Qt4. Список рассылки (19 февраля 2005).
- ↑ Lattner, Chris (25 May 2007). LLVM for OpenGL and other stuff (PDF). LLVM Developers' Meeting. Архивировано из оригинала (Slides) May 8, 2016. Дата обращения April 30, 2018. Используется устаревший параметр
|url-status=(справка) - ↑ Zadeck, Kenneth Re: LLVM/GCC Integration Proposal. Список рассылки (19 ноября 2005).
- ↑ 1 2 Naroff, Steve (25 May 2007). New LLVM C Front-end (PDF). LLVM Developers' Meeting. Архивировано из оригинала (Slides) April 3, 2019. Дата обращения April 30, 2018. Используется устаревший параметр
|url-status=(справка) - ↑ Lattner, Chris New LLVM C front-end: "clang". Список рассылки (11 июля 2007).
- ↑ Getting Started with LLVM Core Libraries. O'Reilly Media. Дата обращения: 17 сентября 2025.
- ↑ Clang-LLVM compiler architecture. ResearchGate. Дата обращения: 17 сентября 2025.
- ↑ 1 2 Clang: Utility and Applications: Library Based Architecture. Дата обращения: 30 апреля 2018. Архивировано 27 апреля 2018 года.
- ↑ LLVM To Finally Rename "flang-new" To "flang" As The Fortran Compiler Is In Good Shape. Phoronix (23 октября 2024). Дата обращения: 17 сентября 2025.
- ↑ Modern LLVM Flang Fortran Compiler Is Ready For Prime-Time With LLVM 20. Phoronix (6 марта 2025). Дата обращения: 17 сентября 2025.
- ↑ 1 2 The New Flang is Now Just Flang. LLVM Project Blog (11 марта 2025). Дата обращения: 17 сентября 2025.
- ↑ 1 2 State of LLVM Flang development. Fortran Discourse. Дата обращения: 17 сентября 2025.
- ↑ 1 2 Fortran Standards Support. flang.llvm.org. Дата обращения: 17 сентября 2025.
- ↑ 1 2 OpenMP Support in Flang. flang.llvm.org. Дата обращения: 17 сентября 2025.
- ↑ Flang 21.1.0 Release Notes. LLVM Developer Group. Дата обращения: 17 сентября 2025.
- ↑ Getting Started with Flang. LLVM Project. Дата обращения: 17 сентября 2025.
- ↑ 1 2 3 4 Clang Features and Goals. LLVM Developer Group. Дата обращения: 17 сентября 2025.
- ↑ Re: Ядро Linux теперь можно собрать посредством Clang. linux.org.ru. Дата обращения: 17 сентября 2025.
- ↑ C++ Support in Clang. riken.jp. Дата обращения: 17 сентября 2025.
- ↑ C++ in Xcode. Apple Developer. Дата обращения: 17 сентября 2025.
- ↑ Compiling CUDA with LLVM. rocm.docs.amd.com. Дата обращения: 17 сентября 2025.
- ↑ Компиляция в Clang. Metanit.com. Дата обращения: 17 сентября 2025.
- ↑ 1 2 3 Этапы компиляции. ejudge.179.ru. Дата обращения: 17 сентября 2025.
- ↑ 1 2 3 Абстрактное синтаксическое дерево на примере Clang. Habr (10 апреля 2018). Дата обращения: 17 сентября 2025.
- ↑ 1 2 llvm/llvm-project. GitHub. Дата обращения: 29 июля 2025.
- ↑ LLVM Download Page. LLVM Developer Group. Дата обращения: 29 июля 2025.
- ↑ The LLVM Logo. LLVM Developer Group. Дата обращения: 29 июля 2025.
- ↑ Clang - Features and Goals: GCC Compatibility, 15 April 2013, <https://clang.llvm.org/features.html#gcccompat>. Проверено 30 апреля 2018.
- ↑ Clang can often be used as a drop-in replacement for GCC, May 2020, <https://clang.llvm.org/get_started.html#driver>. Проверено 9 мая 2020.
- ↑ Clang - Features and Goals: Fast compiles and Low Memory Use, October 2007, <https://clang.llvm.org/features.html>. Проверено 30 апреля 2018.
- ↑ 1 2 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. Архивировано 18 февраля 2011 года.
- ↑ Benchmarking LLVM & Clang Against GCC 4.5. Phoronix (21 апреля 2010). — «Binaries from LLVM-GCC and Clang both struggled to compete with GCC 4.5.0 in the timed HMMer benchmark of a Pfam database search. LLVM-GCC and Clang were about 23% slower(...)Though LLVM / Clang isn't the performance champion at this point, both components continue to be under very active development and there will hopefully be more news to report in the coming months». Дата обращения: 13 февраля 2011. Архивировано 2 ноября 2016 года.
- ↑ 1 2 GCC 4.9 VS. LLVM Clang 3.5 Linux Compiler Benchmarks. OpenBenchmarking.org (14 апреля 2014). Дата обращения: 25 июня 2014. Архивировано 23 октября 2017 года.
- ↑ 1 2 Michael Larabel. LLVM Clang Achieves ~96% The Performance Of GCC On Intel Ice Lake (23 декабря 2019). Дата обращения: 14 января 2021. Архивировано 15 января 2021 года.
- ↑ Peter Eisentraut. New compilers, new timings. peter.eisentraut.org (21 мая 2024). Дата обращения: 29 июля 2025.
- ↑ Clang vs GCC - which produces better binaries? stackoverflow.com. Дата обращения: 1 октября 2018. Архивировано 1 июня 2017 года.
- ↑ Michael Larabel. LLVM Clang 16 vs. GCC 13 Compiler Performance On Intel Raptor Lake (11 мая 2023). Дата обращения: 24 апреля 2024.
- ↑ GCC 14 vs. LLVM Clang 18 Compiler Performance On Fedora 40 With AMD Zen 4. Phoronix (2 мая 2024). Дата обращения: 29 июля 2025.
- ↑ 1 2 Clang. Начало. Habr (27 августа 2018). Дата обращения: 29 июля 2025.
- ↑ Divacky, Roman [Announce] clang/llvm can compile booting FreeBSD kernel on i386/amd64 (25 февраля 2009). Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
- ↑ Building FreeBSD with Clang, Wiki.freebsd.org, 2012-08-24, <https://wiki.freebsd.org/BuildingFreeBSDWithClang>. Проверено 18 сентября 2012.
- ↑ Hornung, Alex llvm/clang once more. Дата обращения: 30 апреля 2018. Архивировано 30 апреля 2018 года.
- ↑ Clang, DragonFly BSD, <https://www.dragonflybsd.org/docs/developer/clang/>. Проверено 18 сентября 2012.
- ↑ Clang can compile LLVM and Clang. LLVM Project Blog (24 декабря 2009). Дата обращения: 31 декабря 2009. Архивировано 26 апреля 2012 года.
- ↑ Clang Successfully Self-Hosts. LLVM Project Blog (4 февраля 2010). Дата обращения: 5 февраля 2010. Архивировано 26 апреля 2012 года.
- ↑ Gregor, Doug Clang++ Builds Boost! LLVM Project Blog (20 мая 2010). Дата обращения: 21 мая 2010. Архивировано 26 апреля 2012 года.
- ↑ Davis, Brad FreeBSD Status Reports April–June, 2010. Дата обращения: 30 апреля 2018. Архивировано 24 июня 2018 года.
- ↑ Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts), Lists.cs.uiuc.edu, <http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html>. Проверено 18 сентября 2012.
- ↑ Gregor, Douglas New C++0x feature support in Clang. Список рассылки (26 января 2011).
- ↑ C++ and C++'0x Support in Clang. LLVM. Дата обращения: 12 марта 2023. Архивировано 4 июля 2013 года.
- ↑ Sonnenberger, Jörg Status of NetBSD and LLVM (19 января 2012). Дата обращения: 26 февраля 2014. Архивировано 21 сентября 2016 года.
- ↑ Ledru, Sylvestre Rebuild of the Debian archive with clang. Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
- ↑ Official Minix 3 website: News. Дата обращения: 7 декабря 2012. Архивировано 17 декабря 2009 года.
- ↑ Gerzo, Daniel FreeBSD Quarterly Status Report January–March, 2012. Список рассылки (12 мая 2012).
- ↑ Davis, Brooks Heads Up: Clang now the default on x86. Список рассылки (5 ноября 2012).
- ↑ Webster, Behan LLVMLinux: Compiling Android with LLVM (18 февраля 2013). Дата обращения: 11 мая 2013. Архивировано 12 мая 2014 года.
- ↑ Tinti, Vinicius LLVMLinux: Nexus 7 (17 марта 2013). Дата обращения: 11 мая 2013. Архивировано 11 июня 2014 года.
- ↑ Du Toit, Stefanus Clang is C++11 feature complete as of *just now*! Дата обращения: 20 апреля 2013. Архивировано 24 сентября 2019 года.
- ↑ [llvm-project] Revision 194194. Дата обращения: 30 апреля 2018. Архивировано 18 ноября 2018 года.
- ↑ Ledru, Sylvestre Rebuild of Debian using Clang 3.5.0. Дата обращения: 30 апреля 2018. Архивировано 1 мая 2018 года.
- ↑ NDK Revision History | Android Developers (англ.). developer.android.com. Дата обращения: 6 марта 2018. Архивировано 6 марта 2018 года.
- ↑ NDK Revision History | Android NDK | Android Developers (англ.). Android Developers. Дата обращения: 30 апреля 2018. Архивировано 5 апреля 2019 года.
- ↑ Nagy, Robert switch the default compiler on amd64 and i386 to clang. Список рассылки (26 июля 2017).
- ↑ Kettenis, Mark Switch the default compiler on armv7 to clang. Список рассылки (19 января 2018).
- ↑ Clang is now used to build Chrome for Windows. blog.llvm.org (5 марта 2018). Дата обращения: 7 апреля 2018. Архивировано 5 марта 2018 года.
- ↑ Firefox Beta 63.0beta, See All New Features, Updates and Fixes (англ.). www.mozilla.org. Дата обращения: 18 марта 2020. Архивировано 19 апреля 2021 года.
- ↑ Hankala, Visa Switch the default compiler on octeon to clang. Список рассылки (1 июля 2019).
- ↑ LLVM 9 Releases With Official RISC-V Target Support, Asm Goto, Clang 9, And More. riscv.org (26 сентября 2019). Дата обращения: 26 сентября 2019. Архивировано 28 декабря 2019 года.
- ↑ FreeBSD svn commit r358454 (29 февраля 2020). Дата обращения: 7 марта 2020. Архивировано 10 марта 2020 года.
- ↑ Kettenis, Mark Switch the default compiler on powerpc to clang. Список рассылки (2 апреля 2020).
- ↑ Hankala, Visa Make clang the default compiler on loongson. Список рассылки (21 декабря 2020).