Clang: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Mercury (обсуждение | вклад) |
Acoder (обсуждение | вклад) м →Преамбула: Исправил орфографическую ошибку |
||
Строка 18: | Строка 18: | ||
|сайт = http://clang.llvm.org/ |
|сайт = http://clang.llvm.org/ |
||
}} |
}} |
||
'''Clang''' (произносится «клэнг»<ref>[http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-July/015624.html Обсуждение произношения названия на рассылке llvmdev]</ref>) является [[Front and back ends|фронтендом]] для [[язык программирования|языков программирования]] [[Си (язык программирования)|C]], [[C++]], [[Objective-C]], [[Objective-C++]] ([[:en:Objective-C++|англ.]]) и [[OpenCL|OpenCL C]], |
'''Clang''' (произносится «клэнг»<ref>[http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-July/015624.html Обсуждение произношения названия на рассылке llvmdev]</ref>) является [[Front and back ends|фронтендом]] для [[язык программирования|языков программирования]] [[Си (язык программирования)|C]], [[C++]], [[Objective-C]], [[Objective-C++]] ([[:en:Objective-C++|англ.]]) и [[OpenCL|OpenCL C]], использующимся совместно с [[фреймворк]]ом [[LLVM]]. Clang транслирует исходные коды в [[байт-код]] LLVM, затем фреймворк производит оптимизации и [[кодогенерация|кодогенерацию]]. |
||
Целью проекта является создание замены GNU Compiler Collection ([[GCC]]). Разработка ведётся согласно концепции [[Открытое программное обеспечение|open source]] в рамках проекта LLVM. |
Целью проекта является создание замены GNU Compiler Collection ([[GCC]]). Разработка ведётся согласно концепции [[Открытое программное обеспечение|open source]] в рамках проекта LLVM. |
Версия от 12:43, 12 октября 2016
Clang | |
---|---|
Тип | Компилятор |
Разработчики | Apple и другие |
Написана на | C++ |
Операционная система | Кроссплатформенное программное обеспечение |
Аппаратные платформы | кроссплатформенность, Linux, FreeBSD, NetBSD, OpenBSD, Миникс 3, DragonFly BSD, BSD, X86, x86-64, RISC-V, ARM, PowerPC и WebAssembly |
Последняя версия |
|
Репозиторий | github.com/llvm/llvm-pro… |
Состояние | Активное |
Лицензия | лицензия Университета Иллинойса (англ.) |
Сайт | clang.llvm.org |
Медиафайлы на Викискладе |
Clang (произносится «клэнг»[2]) является фронтендом для языков программирования C, C++, Objective-C, Objective-C++ (англ.) и OpenCL C, использующимся совместно с фреймворком LLVM. Clang транслирует исходные коды в байт-код LLVM, затем фреймворк производит оптимизации и кодогенерацию.
Целью проекта является создание замены GNU Compiler Collection (GCC). Разработка ведётся согласно концепции open source в рамках проекта LLVM.
В проекте участвуют работники нескольких корпораций, в том числе, 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[3][4]. Сейчас весь исходный код FreeBSD — как ядро, так и пользовательские программы — может быть скомпилирован с помощью Clang. |
16 марта 2009 | Clang/LLVM компилирует работоспособное ядро DragonFly BSD[5][6]. |
23 октября 2009 | Clang 1.0 впервые выпущен в составе LLVM 2.6. |
Декабрь 2009 | Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор libstdc++ из GCC 4.2 и генерировать работоспособный код для нетривиальных программ[7], а также компилирует себя[8]. |
2 февраля 2010 | Clang осуществил self-hosting (скомпилировал работоспособную версию clang+llvm)[9]. |
20 февраля 2010 | Исходный код HelenOS был изменен для успешной компиляции с помощью Clang и прошёл все регрессионные тесты для ядра и пользовательских программ на платформе IA-32[10]. |
20 мая 2010 | Последняя версия Clang успешно собирает Boost и проходит большинство тестов[11]. |
10 июня 2010 | Clang и LLVM становятся частью FreeBSD (хотя компилятором по умолчанию остается GCC)[12]. |
25 октября 2010 | Clang/LLVM успешно компилирует ядро Linux (частично)[13]. До полной поддержки остаётся исправить несколько ошибок в clang[14] и избавиться от некоторых gnu-специфичных конструкций в ядре. |
Январь 2011 | Проведена предварительная работа по поддержке черновика стандарта C++0x, в разрабатываемой версии Clang поддерживаются некоторые новые возможности[15][16]. |
10 февраля 2011 | Clang успешно компилирует виртуальную машину Java HotSpot[17]. |
18 августа 2011 | Неофициальная версия Clang с поддержкой SafeCode, технологией отслеживания возможных проблем при работе с памятью в разрабатываемом приложении[18]. |
22 октября 2011 | Обеспечена возможность сборки LibreOffice компилятором Clang[19]. |
28 февраля 2012 | Clang 3.0 смог скомпилировать более 91 % пакетов Debian[20]. |
29 февраля 2012 | Clang стал основным компилятором для Minix 3[21]. |
12 мая 2012 | Объявлено о замене GCC на Clang в базовой системе FreeBSD[22]. |
14 июля 2012 | Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang[23]. |
19 апреля 2013 | Объявлено о поддержке Clang’ом стандарта языка C++11[24]. |
18 июня 2013 | Релиз Clang 3.3 поддерживает 100 % возможностей C++11. |
07 ноября 2013 | Clang поддерживает 100 % возможностей C++14[25]. |
11 сентября 2014 | С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC[26]. |
Примечания
- ↑ LLVM 19.1.6 — 2024.
- ↑ Обсуждение произношения названия на рассылке llvmdev
- ↑ Divacky, Roman [ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64 . Архивировано 1 мая 2012 года.
- ↑ BuildingFreeBSDWithClang — FreeBSD Wiki
- ↑ Hornung, Alex llvm/clang once more . Архивировано 1 мая 2012 года.
- ↑ DragonFlyBSD: clang
- ↑ Clang team, clang: a C language family frontend for LLVM
- ↑ Clang can compile LLVM and Clang . Блог проекта LLVM. Архивировано 1 мая 2012 года.
- ↑ Clang Successfully Self-Hosts . Блог проекта LLVM. Архивировано 1 мая 2012 года.
- ↑ HelenOS mainline changeset head,294 . Архивировано 1 мая 2012 года.
- ↑ Gregor, Doug Clang++ Builds Boost! Блог проекта LLVM. Архивировано 1 мая 2012 года.
- ↑ Davis, Brad FreeBSD Status Reports April - June, 2010 . Архивировано 1 мая 2012 года.
- ↑ [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)
- ↑ Страница отслеживания ошибок llvm, препятствующих сборке ядра Linux
- ↑ Gregor, Douglas (26 January 2011). "New C++0x feature support in Clang" (Mailing list). Дата обращения: 29 января 2011.
- ↑ C++ and C++'0x Support in Clang . LLVM. Архивировано 1 мая 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. Архивировано 1 мая 2012 года.
- ↑ Criswell, John [LLVMdev] Clang + SAFECode Release Announcement (18 августа 2011). Дата обращения: 25 августа 2011. Архивировано 1 мая 2012 года.
- ↑ Building LibreOffice with Clang (22 октября 2011). Дата обращения: 23 октября 2011. Архивировано 1 мая 2012 года.
- ↑ Ledru, Sylvestre Rebuild of the Debian archive with clang . Архивировано 19 июня 2012 года.
- ↑ Minix 3.2.0, Releases Clang is the default compiler . Архивировано 19 июня 2012 года.
- ↑ Gerzo, Daniel FreeBSD Quarterly Status Report January-March, 2012 . Архивировано 30 июня 2012 года.
- ↑ OpenNews: Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang . Архивировано 8 августа 2012 года.
- ↑ Du Toit, Stefanus Clang is C++11 feature complete as of *just now*!
- ↑ [llvm-project] Revision 194194
- ↑ Rebuild of Debian using Clang 3.5.0 . sylvestre.ledru.info. Дата обращения: 6 мая 2016.