Clang: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Изменение в указанной форме произношения. Википедия на английском языке, а также указанный на данной странице источник сообщают именно о такой форме произношения. |
м Переносит шаблон {{Выполнение программы}} Метка: редактор вики-текста 2017 |
||
(не показаны 34 промежуточные версии 20 участников) | |||
Строка 6: | Строка 6: | ||
| подпись = |
| подпись = |
||
| тип = [[Компилятор]] |
| тип = [[Компилятор]] |
||
| автор = |
| автор = Крис Латтнер |
||
| разработчик = [[Apple]] и другие |
| разработчик = [[Apple]] и другие |
||
| написана на = [[C++]] |
| написана на = [[C++]] |
||
| операционные системы = [[Кроссплатформенное программное обеспечение]] |
| операционные системы = [[Кроссплатформенное программное обеспечение]] |
||
| языки интерфейса = |
| языки интерфейса = |
||
| первый выпуск = |
| первый выпуск = 26 сентября 2007 |
||
| последняя версия = 16.0.0<ref>{{Cite news|title=LLVM 16.0.0 Release|url=https://discourse.llvm.org/t/llvm-16-0-0-release/69326|accessdate=2023-03-17|archivedate=2023-03-17}}</ref> |
|||
| последняя версия = 7.0.1 |
|||
| дата последней версии = |
| дата последней версии = {{Start date and age|2023|03|17}} |
||
| состояние = Активное |
| состояние = Активное |
||
| лицензия = [[лицензия Университета Иллинойса]] ([[:en:University of Illinois/NCSA Open Source License|англ.]]) |
| лицензия = [[лицензия Университета Иллинойса]] ([[:en:University of Illinois/NCSA Open Source License|англ.]]) |
||
| сайт = http://clang.llvm.org/ |
| сайт = http://clang.llvm.org/ |
||
}} |
}} |
||
'''Clang''' (произносится «клэнг»<ref>[http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-July/015624.html Обсуждение произношения названия на рассылке llvmdev] {{webarchive|url=https://web.archive.org/web/20120208050747/http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-July/015624.html |date=2012-02-08 }}</ref>) является [[Front and back ends|фронтендом]] для [[язык программирования|языков программирования]] [[Си (язык программирования)|C]], [[C++]], [[Objective-C]], [[Objective-C++]] ([[:en:Objective-C++|англ.]]) и [[OpenCL|OpenCL C]], использующимся совместно с [[фреймворк]]ом [[LLVM]]. Clang транслирует исходные коды в [[байт-код]] LLVM, затем фреймворк производит оптимизации и [[кодогенерация|кодогенерацию]]. |
'''Clang''' (произносится «клэнг»<ref>[http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-July/015624.html Обсуждение произношения названия на рассылке llvmdev] {{webarchive|url=https://web.archive.org/web/20120208050747/http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-July/015624.html |date=2012-02-08 }}</ref>) является [[Front and back ends|фронтендом]] для [[язык программирования|языков программирования]] [[Си (язык программирования)|C]], [[C++]], [[Objective-C]], [[Objective-C++]] ([[:en:Objective-C++|англ.]]) и [[OpenCL|OpenCL C]], использующимся совместно с [[фреймворк]]ом [[LLVM]]. Clang транслирует [[Исходный код|исходные коды]] в [[байт-код]] [[Low Level Virtual Machine|LLVM]], затем фреймворк производит оптимизации и [[кодогенерация|кодогенерацию]]. |
||
Целью проекта является создание замены GNU Compiler Collection ([[GCC]]). Разработка ведётся согласно концепции [[Открытое программное обеспечение|open source]] в рамках проекта LLVM. |
Целью проекта является создание замены GNU Compiler Collection ([[GCC]]). Разработка ведётся согласно концепции [[Открытое программное обеспечение|open source]] в рамках проекта LLVM. |
||
Clang 12, последней версии от апреля 2021, имеет полную поддержку всех опубликованных стандартов [[C++]] до [[C++17|C++17]], реализует большинство функций [[C++20]], и добавляет частичную поддержку разрабатываемого стандарта [[C++23]] . Начиная с версии V6.0.0, в Clang компилирует C++ с использованием в GNU [[C++14]] диалект по умолчанию, которое включает функции из C++14 стандарта и в соответствии с GNU расширений. |
|||
В проекте участвуют работники нескольких корпораций, в том числе [[Google (компания)|Google]] и [[Apple]]. Исходный код доступен на условиях [[Лицензия BSD|BSD]]-подобной лицензии. |
В проекте участвуют работники нескольких корпораций, в том числе [[Google (компания)|Google]] и [[Apple]]. Исходный код доступен на условиях [[Лицензия BSD|BSD]]-подобной лицензии. |
||
Строка 26: | Строка 29: | ||
== Обзор == |
== Обзор == |
||
Clang — это транслятор для C-подобных языков, созданный специально для работы на базе LLVM. Комбинация Clang и LLVM представляет собой полноценный компилятор и предоставляет набор инструментов, позволяющих полностью заменить GCC. Благодаря архитектуре, основанной на [[Библиотека (программирование)|библиотеках]], Clang (как и LLVM) легко встраивается в другие приложения. |
Clang — это [[транслятор]] для C-подобных языков, созданный специально для работы на базе LLVM. Комбинация Clang и LLVM представляет собой полноценный компилятор и предоставляет набор инструментов, позволяющих полностью заменить GCC. Благодаря архитектуре, основанной на [[Библиотека (программирование)|библиотеках]], Clang (как и LLVM) легко встраивается в другие приложения. |
||
Одной из главных задач Clang является поддержка инкрементной компиляции, позволяющей более тесно интегрировать компилятор и графический интерфейс [[Интегрированная среда разработки|среды разработки]], в отличие от GCC, который был создан для работы в классическом цикле «компиляция-линковка-отладка». В отличие от GCC, ориентированного преимущественно на [[кодогенерация|кодогенерацию]], Clang стремится предоставить универсальный фреймворк для [[парсинг]]а, индексации, [[Статический анализ кода|статического анализа]] и [[Компилятор|компиляции]] языков семейства Си. В частности, Clang не производит упрощений исходного кода на этапе парсинга (как это делает GCC), гарантируя точное воспроизведение исходного текста в [[абстрактное синтаксическое дерево]]. |
Одной из главных задач Clang является поддержка инкрементной компиляции, позволяющей более тесно интегрировать компилятор и графический интерфейс [[Интегрированная среда разработки|среды разработки]], в отличие от GCC, который был создан для работы в классическом цикле «компиляция-линковка-отладка». В отличие от GCC, ориентированного преимущественно на [[кодогенерация|кодогенерацию]], Clang стремится предоставить универсальный фреймворк для [[парсинг]]а, индексации, [[Статический анализ кода|статического анализа]] и [[Компилятор|компиляции]] языков семейства Си. В частности, Clang не производит упрощений исходного кода на этапе парсинга (как это делает GCC), гарантируя точное воспроизведение исходного текста в [[абстрактное синтаксическое дерево]]. |
||
В отличие от GCC, Clang изначально спроектирован для максимального сохранения информации в ходе процесса компиляции, в том числе сохранения «внешнего вида» исходного кода. Эта особенность позволяет Clang создавать развернутые контекстно-ориентированные сообщения об ошибках, понятные как для программистов, так и для сред разработки. Модульный дизайн компилятора позволяет использовать его в составе среды разработки для индексирования кода, подсветки синтаксиса и [[Рефакторинг|переработки кода]]. |
В отличие от GCC, Clang изначально спроектирован для максимального сохранения информации в ходе процесса компиляции, в том числе сохранения «внешнего вида» исходного кода. Эта особенность позволяет Clang создавать развернутые контекстно-ориентированные сообщения об ошибках, понятные как для программистов, так и для сред разработки. Модульный дизайн компилятора позволяет использовать его в составе среды разработки для индексирования кода, [[Подсветка синтаксиса|подсветки синтаксиса]] и [[Рефакторинг|переработки кода]]. |
||
Clang поддерживает большинство распространенных опций GCC. |
Clang поддерживает большинство распространенных опций GCC. |
||
Строка 50: | Строка 53: | ||
|archivedate = 2012-04-30 |
|archivedate = 2012-04-30 |
||
|deadurl = yes |
|deadurl = yes |
||
}}</ref><ref> |
}}</ref><ref>{{Cite web |url=http://wiki.freebsd.org/BuildingFreeBSDWithClang |title=BuildingFreeBSDWithClang — FreeBSD Wiki<!-- Заголовок добавлен ботом --> |access-date=2011-03-17 |archive-date=2012-10-01 |archive-url=https://web.archive.org/web/20121001103027/http://wiki.freebsd.org/BuildingFreeBSDWithClang |deadlink=no }}</ref>. Сейчас весь исходный код FreeBSD — как ядро, так и пользовательские программы — может быть скомпилирован с помощью Clang. |
||
|- |
|- |
||
|- |
|- |
||
Строка 61: | Строка 64: | ||
|archivedate = 2012-04-30 |
|archivedate = 2012-04-30 |
||
|deadurl = yes |
|deadurl = yes |
||
}}</ref><ref> |
}}</ref><ref>{{Cite web |url=http://www.dragonflybsd.org/docs/developer/clang/ |title=DragonFlyBSD: clang<!-- Заголовок добавлен ботом --> |access-date=2011-03-17 |archive-date=2012-10-05 |archive-url=https://web.archive.org/web/20121005113539/http://www.dragonflybsd.org/docs/developer/clang/ |deadlink=no }}</ref>. |
||
|- |
|- |
||
|23 октября 2009||Clang 1.0 впервые выпущен в составе LLVM 2.6. |
|23 октября 2009||Clang 1.0 впервые выпущен в составе LLVM 2.6. |
||
|- |
|- |
||
|Декабрь 2009||Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор [[libstdc++]] из GCC 4.2 и генерировать работоспособный код для нетривиальных программ<ref name=clang>Clang team, ''[http://clang.llvm.org/ clang: a C language family frontend for LLVM]''</ref>, а также компилирует себя<ref>{{cite web |
|Декабрь 2009||Кодогенерация для языков C и Objective-C достигла промышленного качества (поддержка C++ и Objective-C++ ещё не завершена). Компилятор C++ может осуществлять лексический разбор [[libstdc++]] из GCC 4.2 и генерировать работоспособный код для нетривиальных программ<ref name=clang>Clang team, ''[http://clang.llvm.org/ clang: a C language family frontend for LLVM] {{Wayback|url=http://clang.llvm.org/ |date=20110313095638 }}''</ref>, а также компилирует себя<ref>{{cite web |
||
|publisher = Блог проекта LLVM |
|publisher = Блог проекта LLVM |
||
|url = http://blog.llvm.org/2009/12/clang-builds-llvm.html |
|url = http://blog.llvm.org/2009/12/clang-builds-llvm.html |
||
Строка 112: | Строка 115: | ||
}}</ref>. |
}}</ref>. |
||
|- |
|- |
||
|25 октября 2010||Clang/LLVM успешно компилирует ядро [[Linux]] (частично)<ref>[http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)] {{webarchive|url=https://web.archive.org/web/20150907044958/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |date=2015-09-07 }}</ref>. До полной поддержки остаётся исправить несколько ошибок в clang<ref> |
|25 октября 2010||Clang/LLVM успешно компилирует ядро [[Linux]] (частично)<ref>[http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)] {{webarchive|url=https://web.archive.org/web/20150907044958/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |date=2015-09-07 }}</ref>. До полной поддержки остаётся исправить несколько ошибок в clang<ref>{{Cite web |url=http://llvm.org/bugs/show_bug.cgi?id=4068 |title=Страница отслеживания ошибок llvm, препятствующих сборке ядра Linux |access-date=2011-10-17 |archive-date=2014-06-09 |archive-url=https://web.archive.org/web/20140609150754/http://llvm.org/bugs/show_bug.cgi?id=4068 |deadlink=no }}</ref> и избавиться от некоторых gnu-специфичных конструкций в ядре. |
||
[http://llvm.org/bugs/show_bug.cgi?id=4068 Страница отслеживания ошибок llvm, препятствующих сборке ядра Linux]</ref> и избавиться от некоторых gnu-специфичных конструкций в ядре. |
|||
|- |
|- |
||
|Январь 2011||Проведена предварительная работа по поддержке черновика стандарта [[C++0x]], в разрабатываемой версии Clang поддерживаются некоторые новые возможности<ref>{{cite mailing list |
|Январь 2011||Проведена предварительная работа по поддержке черновика стандарта [[C++0x]], в разрабатываемой версии Clang поддерживаются некоторые новые возможности<ref>{{cite mailing list |
||
Строка 139: | Строка 141: | ||
|last = Simonis |
|last = Simonis |
||
|title = Compiling the HotSpot VM with Clang |
|title = Compiling the HotSpot VM with Clang |
||
|date = |
|date = 2011-02-10 |
||
|quote = ''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. '' |
|quote = ''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. '' |
||
|accessdate = |
|accessdate = 2011-02-13 |
||
|archiveurl = https://www.webcitation.org/67JxM051z?url=http://weblogs.java.net/blog/simonis/archive/2011/02/10/compiling-hotspot-vm-clang |
|archiveurl = https://www.webcitation.org/67JxM051z?url=http://weblogs.java.net/blog/simonis/archive/2011/02/10/compiling-hotspot-vm-clang |
||
|archivedate = 2012-04-30 |
|archivedate = 2012-04-30 |
||
Строка 152: | Строка 154: | ||
|last = Criswell |
|last = Criswell |
||
|title = [LLVMdev] Clang + SAFECode Release Announcement |
|title = [LLVMdev] Clang + SAFECode Release Announcement |
||
|date = |
|date = 2011-08-18 |
||
|accessdate = |
|accessdate = 2011-08-25 |
||
|archiveurl = https://www.webcitation.org/67JxMWDqM?url=http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-August/042506.html |
|archiveurl = https://www.webcitation.org/67JxMWDqM?url=http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-August/042506.html |
||
|archivedate = 2012-04-30 |
|archivedate = 2012-04-30 |
||
Строка 162: | Строка 164: | ||
|url = http://lists.freedesktop.org/archives/libreoffice/2011-October/019632.html |
|url = http://lists.freedesktop.org/archives/libreoffice/2011-October/019632.html |
||
|title = Building LibreOffice with Clang |
|title = Building LibreOffice with Clang |
||
|date = |
|date = 2011-10-22 |
||
|accessdate = |
|accessdate = 2011-10-23 |
||
|archiveurl = https://www.webcitation.org/67JxN1ZVJ?url=http://lists.freedesktop.org/archives/libreoffice/2011-October/019632.html |
|archiveurl = https://www.webcitation.org/67JxN1ZVJ?url=http://lists.freedesktop.org/archives/libreoffice/2011-October/019632.html |
||
|archivedate = 2012-04-30 |
|archivedate = 2012-04-30 |
||
Строка 201: | Строка 203: | ||
|14 июля 2012||Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang<ref>{{cite web |
|14 июля 2012||Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang<ref>{{cite web |
||
|url = http://www.opennet.ru/opennews/art.shtml?num=34333 |
|url = http://www.opennet.ru/opennews/art.shtml?num=34333 |
||
|title = OpenNews: Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang |
|title = OpenNews: Продемонстрирован запуск openSUSE с ядром Linux, собранным при помощи Clang |
||
|deadurl = yes |
|||
⚫ | |||
| |
|accessdate = 2012-07-16 |
||
| |
|archive-date = 2012-07-18 |
||
⚫ | |||
}}</ref>. |
}}</ref>. |
||
|- |
|- |
||
|19 апреля 2013||Объявлено о поддержке Clang’ом стандарта языка C++11<ref>{{cite web |
|19 апреля 2013||Объявлено о поддержке Clang’ом стандарта языка C++11<ref>{{cite web |
||
Строка 212: | Строка 215: | ||
| url=https://twitter.com/sdt_intel/status/325289093170864129 |
| url=https://twitter.com/sdt_intel/status/325289093170864129 |
||
| title=Clang is C++11 feature complete as of *just now*! |
| title=Clang is C++11 feature complete as of *just now*! |
||
| access-date=2013-04-22 |
|||
⚫ | |||
| archive-date=2019-09-24 |
|||
| archive-url=https://web.archive.org/web/20190924204137/https://twitter.com/stefanusdutoit/status/325289093170864129 |
|||
| deadlink=no |
|||
⚫ | |||
|- |
|- |
||
|18 июня 2013||Релиз Clang 3.3 поддерживает 100 % возможностей C++11. |
|18 июня 2013||Релиз Clang 3.3 поддерживает 100 % возможностей C++11. |
||
|- |
|- |
||
|07 ноября 2013||Clang поддерживает 100 % возможностей C++14<ref>[http://llvm.org/viewvc/llvm-project?view=revision&revision=194194 [llvm-project&# |
|07 ноября 2013||Clang поддерживает 100 % возможностей C++14<ref>[http://llvm.org/viewvc/llvm-project?view=revision&revision=194194]{{Wayback|url=http://llvm.org/viewvc/llvm-project?view=revision&revision=194194|date=20170130114326}}<span> [llvm-project</span>]<span> Revision 194194<!-- Заголовок добавлен ботом --></span></ref>. |
||
|- |
|- |
||
|11 сентября 2014 |
|11 сентября 2014 |
||
|С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC<ref>{{Cite web|url=http://sylvestre.ledru.info/blog/2014/09/11/rebuild-of-debian-using-clang-3-5|title=Rebuild of Debian using Clang 3.5.0|publisher=sylvestre.ledru.info|accessdate=2016-05-06}}</ref>. |
|С помощью Clang 3.5 можно пересобрать 94,3 % архива Debian. Доля неудач при сборках снизилась с января 2013 г. на 1,2 % на релиз, в основном вследствие повышения совместимости с флагами GCC<ref>{{Cite web|url=http://sylvestre.ledru.info/blog/2014/09/11/rebuild-of-debian-using-clang-3-5|title=Rebuild of Debian using Clang 3.5.0|publisher=sylvestre.ledru.info|accessdate=2016-05-06|archive-date=2016-04-19|archive-url=https://web.archive.org/web/20160419003014/http://sylvestre.ledru.info/blog/2014/09/11/rebuild-of-debian-using-clang-3-5|deadlink=no}}</ref>. |
||
|- |
|- |
||
|13 марта 2017 |
|13 марта 2017 |
||
Строка 230: | Строка 237: | ||
| title=switch the default compiler on amd64 and i386 to clang |
| title=switch the default compiler on amd64 and i386 to clang |
||
| date=26 July 2017 |
| date=26 July 2017 |
||
| accessdate=30 September 2017 |
| accessdate=30 September 2017 |
||
| archivedate=2018-10-25 |
|||
| archiveurl=https://web.archive.org/web/20181025144820/https://marc.info/?l=openbsd-cvs&m=150109829003860&w=2 |
|||
}}</ref>. |
|||
|- |
|- |
||
|7 сентября 2017 |
|7 сентября 2017 |
||
|Clang 5.0.0 [https://releases.llvm.org/5.0.0/tools/clang/docs/ReleaseNotes.html Релиз]. |
|Clang 5.0.0 [https://releases.llvm.org/5.0.0/tools/clang/docs/ReleaseNotes.html Релиз]. |
||
|- |
|- |
||
|5 марта 2018||Clang становится компилятором по умолчанию сборок [[Google Chrome]] для всех поддерживаемых платформ.<ref>{{Cite web|url=http://blog.llvm.org/2018/03/clang-is-now-used-to-build-chrome-for.html|title=Clang is now used to build Chrome for Windows|accessdate=2018-03-06}}</ref> |
|5 марта 2018||Clang становится компилятором по умолчанию сборок [[Google Chrome]] для всех поддерживаемых платформ.<ref>{{Cite web|url=http://blog.llvm.org/2018/03/clang-is-now-used-to-build-chrome-for.html|title=Clang is now used to build Chrome for Windows|accessdate=2018-03-06|archive-date=2018-03-05|archive-url=https://web.archive.org/web/20180305220009/http://blog.llvm.org/2018/03/clang-is-now-used-to-build-chrome-for.html|deadlink=no}}</ref> |
||
|- |
|- |
||
|8 марта 2018 |
|8 марта 2018 |
||
Строка 242: | Строка 252: | ||
|19 сентября 2018 |
|19 сентября 2018 |
||
|Clang 7.0.0 [https://releases.llvm.org/7.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|Clang 7.0.0 [https://releases.llvm.org/7.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
||
|- |
|||
|20 марта 2019 |
|||
|Clang 8.0.0 [https://releases.llvm.org/8.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|19 сентября 2019 |
|||
|Clang 9.0.0 [https://releases.llvm.org/9.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|24 марта 2020 |
|||
|Clang 10.0.0 [https://releases.llvm.org/10.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|6 января 2021 |
|||
|Clang 11.0.0 [https://releases.llvm.org/11.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|14 апреля 2021 |
|||
|Clang 12.0.0 [https://releases.llvm.org/12.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|4 октября 2021 |
|||
|Clang 13.0.0 [https://releases.llvm.org/13.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|25 марта 2022 |
|||
|Clang 14.0.0 [https://releases.llvm.org/14.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|6 сентября 2022 |
|||
|Clang 15.0.0 [https://releases.llvm.org/15.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|- |
|||
|17 марта 2023 |
|||
|Clang 16.0.0 [https://releases.llvm.org/16.0.0/tools/clang/docs/ReleaseNotes.html Релиз] |
|||
|} |
|} |
||
Строка 250: | Строка 287: | ||
* [http://clang.llvm.org/ Официальная страница проекта] |
* [http://clang.llvm.org/ Официальная страница проекта] |
||
{{Выполнение программы}} |
|||
[[Категория:Компиляторы]] |
[[Категория:Компиляторы]] |
Версия от 21:33, 24 мая 2023
Clang | |
---|---|
Тип | Компилятор |
Автор | Крис Латтнер |
Разработчики | Apple и другие |
Написана на | C++ |
Операционная система | Кроссплатформенное программное обеспечение |
Первый выпуск | 26 сентября 2007 |
Аппаратные платформы | кроссплатформенность, Linux, FreeBSD, NetBSD, OpenBSD, Миникс 3, DragonFly BSD, BSD, x86, x86-64, RISC-V, ARM, PowerPC и WebAssembly |
Последняя версия | 16.0.0[1] (17 марта 2023 ) |
Репозиторий | 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.
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[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]. |
13 марта 2017 | Clang 4.0.0 Релиз. |
26 июля 2017 | Clang становится компилятором по умолчанию в OpenBSD 6.2.[27]. |
7 сентября 2017 | Clang 5.0.0 Релиз. |
5 марта 2018 | Clang становится компилятором по умолчанию сборок Google Chrome для всех поддерживаемых платформ.[28] |
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 Релиз |
Примечания
- ↑ "LLVM 16.0.0 Release". Дата обращения: 17 марта 2023.
{{cite news}}
:|archive-date=
требует|archive-url=
(справка) - ↑ Обсуждение произношения названия на рассылке 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 года.
- ↑ Gregor, Douglas (26 January 2011). "New C++0x feature support in Clang" (Mailing list). Архивировано 30 января 2011. Дата обращения: 29 января 2011.
{{cite mailing list}}
: Неизвестный параметр|deadurl=
игнорируется (|url-status=
предлагается) (справка) - ↑ 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 года.
- ↑ Nagy, Robert (26 July 2017). "switch the default compiler on amd64 and i386 to clang" (Mailing list). Архивировано 25 октября 2018. Дата обращения: 30 сентября 2017.
- ↑ Clang is now used to build Chrome for Windows . Дата обращения: 6 марта 2018. Архивировано 5 марта 2018 года.
Ссылки
- Программное обеспечение по алфавиту
- Программное обеспечение, разработанное в 2007 году
- Компиляторы
- Компиляторы Си
- Компиляторы C++
- Компиляторы Obj-C
- Статические анализаторы кода
- Программное обеспечение для macOS
- Программное обеспечение для Linux
- Свободные компиляторы и интерпретаторы
- Программное обеспечение Apple