Clang

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Clang
Логотип LLVM
Тип компілятор
Розробники Apple Inc., Google Inc. та інші
Стабільний випуск 14.0.1 (13 квітня, 2022; 2 роки тому (2022-04-13))
Платформа кросплатформова програма, Linux, FreeBSD, NetBSD, OpenBSD, Minix 3, DragonFly BSD, Berkeley Software Distribution, x86, x86_64, RISC-V, ARM, PowerPC і WebAssembly
Операційна система крос-платформовий
Мова програмування C++
Стан розробки активний
Ліцензія BSD
Репозиторій github.com/llvm/llvm-project
Вебсайт clang.llvm.org

Clang являє собою фронт-енд для мов програмування C, C++, Objective-C і Objective-C++, що використовує задля оптимізації та кодогенерування фреймворк LLVM.

Метою проекту є заміна фронт-енду цих мов з GNU Compiler Collection (GCC). Розробка спонсорується корпорацією Apple, початковий код розповсюджується у рамках BSD-подібної ліцензії.

Огляд[ред. | ред. код]

Clang — це новий компілятор для C-подібних мов, створений спеціально для роботи на базі LLVM. Комбінація Clang та LLVM надає набір інструментів, які дозволяють повністю замінити GCC. Завдяки архітектурі, основаній на бібліотеках, Clang (як і LLVM) легко влаштовується у інші застосування.

Однією з головних задач Clang є підтримка інкрементної компіляції, яка дозволяє більш тісно інтегрувати компілятор та графічний інтерфейс середовища розробки, на відміну від GCC, який був створений для роботи в класичному циклі «компіляція-лінкування-налагодження». У ході компіляції GCC здійснює спрощуюче перетворення вихідного коду, та якщо помилка компіляції виявляється на цій стадії або після неї, визначити джерело помилки у первісному коді стає важко. Окрім того, авторам середовищ розробки, заснованих на 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[en] (скомпілював працездатну версію 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 Clang/LLVM приходить на зміну використовуваному раніше GCC в FreeBSD[21]
14 липня 2012 Продемонстровано запуск openSUSE із ядром Linux, зібраним із допомогою Clang[22].
19 квітня 2013 Оголошено про підтримку Clang'ом C++11[23].
18 червня 2013 Реліз Clang 3.3 підтримує 100 % можливостей C++11.
7 листопада 2013 Clang підтримує 100 % можливостей C++14.

Примітки[ред. | ред. код]

  1. "clang" C Language Family Frontend for LLVM
  2. Divacky, Roman. [ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64. Архів оригіналу за 30 квітня 2012. Процитовано 7 березня 2012.
  3. BuildingFreeBSDWithClang — FreeBSD Wiki. Архів оригіналу за 1 жовтня 2012. Процитовано 7 березня 2012.
  4. Hornung, Alex. llvm/clang once more. Архів оригіналу за 30 квітня 2012. Процитовано 7 березня 2012.
  5. DragonFlyBSD: clang. Архів оригіналу за 5 жовтня 2012. Процитовано 7 березня 2012.
  6. Clang team, clang: a C language family frontend for LLVM [Архівовано 13 березня 2011 у Wayback Machine.]
  7. Clang can compile LLVM and Clang. Блог проекту LLVM. Архів оригіналу за 30 квітня 2012. Процитовано 7 березня 2012.
  8. Clang Successfully Self-Hosts. Блог проекту LLVM. Архів оригіналу за 30 квітня 2012. Процитовано 7 березня 2012.
  9. HelenOS mainline changeset head,294. Архів оригіналу за 30 квітня 2012. Процитовано 7 березня 2012.
  10. Gregor, Doug. Clang++ Builds Boost!. Блог проекту LLVM. Архів оригіналу за 30 квітня 2012. Процитовано 7 березня 2012.
  11. Davis, Brad. FreeBSD Status Reports April - June, 2010. Архів оригіналу за 30-04-2012. Процитовано 07-03-2012.
  12. [ANNOUNCE] Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts). Архів оригіналу за 7 вересень 2015. Процитовано 7 березень 2012.
  13. Сторінка відстежування помилок llvm, які не дозволяють зібрати ядро Linux. Архів оригіналу за 9 червня 2014. Процитовано 7 березня 2012.
  14. Gregor, Douglas (26 січня 2011). New C++0x feature support in Clang (Список розсилки). Архів оригіналу за 30 січень 2011. Процитовано 29 січня 2011.
  15. C++ and C++'0x Support in Clang. LLVM. Архів оригіналу за 30 квітня 2012. Процитовано 7 березня 2012.
  16. Simonis, Volker (10 лютого 2011). Compiling the HotSpot VM with Clang. Архів оригіналу за 30 квітня 2012. Процитовано 13 лютого 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.
  17. Criswell, John (18 серпня 2011). [LLVMdev] Clang + SAFECode Release Announcement. Архів оригіналу за 30 квітня 2012. Процитовано 25 серпня 2011.
  18. Building LibreOffice with Clang. 22 жовтня 2011. Архів оригіналу за 30 квітня 2012. Процитовано 23 жовтня 2011.
  19. Ledru, Sylvestre. Rebuild of the Debian archive with clang. Архів оригіналу за 18 червня 2012. Процитовано 30 травня 2012.
  20. Minix 3.2.0, Releases. Clang is the default compiler. Архів оригіналу за 18 червня 2012. Процитовано 30 травня 2012.
  21. Gerzo, Daniel (12 May 2012). FreeBSD Quarterly Status Report January-March, 2012 (Список розсилки). Архів оригіналу за 30 червня 2012. Процитовано 14 May 2012.
  22. Linux Kernel built with clang boots into openSUSE. Архів оригіналу за 11 листопада 2014.
  23. Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*!. Архів оригіналу за 24 вересня 2019. Процитовано 7 вересня 2016.

Посилання[ред. | ред. код]