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 лютого 2009Clang/LLVM дозволяє скомпілювати ядро FreeBSD. Зараз увесь вихідний код FreeBSD — як ядро, так і програми користувача — можуть бути скомпільовані за допомогою Clang.16 березня 2009Clang/LLVM компілює працездатне ядро DragonFly BSD.23 жовтня 2009Clang 1.0 вперше випущений у складі LLVM 2.6.Грудень 2009Кодогенерація для мов C та Objective-C досягла промислової якості (підтримка C++ та Objective-C++ ще не завершена). Компілятор C++ може здійснювати лексичний розбір libstdc++ з GCC 4.2 та генерувати працездатний код для нетривіальних програм,Clang team, clang: a C language family frontend for LLVM та також компілює себе.2 лютого 2010Clang здійснив (скомпілював працездатну версію clang+llvm).20 лютого 2010Вихідний код HelenOS був змінений для успішної компіляції за допомогою Clang та пройшов усі регресивні тести для ядра та користувацьких програм на платформі IA-32. 20 травня 2010Остання версія Clang успішно складає Boost та проходить більшість тестів.10 червня 2010Clang та LLVM стають частиною FreeBSD (хоча компілятором за замовчуванням залишається GCC).25 жовтня 2010Clang/LLVM успішно компілює ядро Linux (частково). До повної підтримки лишається виправити кілька помилок у clang та позбутися деяких gnu-специфічних конструкцій у ядрі.Січень 2011Проведена попередня робота з підтримки чернетки стандарту C++0x, у розроблюваній версії Clang підтримуються деякі нові можливості.10 лютого 2011Clang успішно компілює віртуальну машину Java HotSpot.18 серпня 2011Неофіційна версія Clang з підтримкою SafeCode, технологією відстежування можливих проблем при роботі з пам'яттю у розроблюваному застосуванні. 22 жовтня 2011Забезпечена можливість збирання LibreOffice компілятором Clang.28 лютого 2012Clang 3.0 зміг скомпілювати понад 91 % пакетів Debian29 лютого 2012Clang став основним компілятором для Minix 3 12 травня 2012 Clang/LLVM приходить на зміну використовуваному раніше GCC в FreeBSD14 липня 2012Продемонстровано запуск openSUSE із ядром Linux, зібраним із допомогою Clang.19 квітня 2013Оголошено про підтримку Clang'ом C++11.18 червня 2013Реліз Clang 3.3 підтримує 100 % можливостей C++11.7 листопада 2013 Clang підтримує 100 % можливостей C++14.
Примітки
Посилання Офіційна сторінка проекту