Порівняння gcc vs clang
Відео: Compilers Clang LLVM C ++
Як ви знаєте, всі програми являють собою набір машинних команд, для перетворення програмного коду в машинні команди використовуються компілятори. GCC і LLVM Clang - це два найпопулярніших на даний момент компілятора, які використовуються для компіляції програм в різних дистрибутивах.
Вони обидва підтримують найновіші можливості мов програмування і працюють досить швидко. Але у кожного з них є свої переваги і недоліки. У цій статті ми спробуємо виконати порівняння GCC vs Clang. Ми порівняємо їх особливості і продуктивність, грунтуючись на тестах від phoronix. Але спочатку давайте розглянемо основні відмінності.
LLVM Clang
Розробка набору компіляторів LLVM Clang почалася в 2003 році. LLVM - це не компілятор якогось певного мови, а скоріше основа, яка використовується для генерації об`єктного коду для будь-якого виду вихідного коду. Проект містить широкий спектр інструкцій, тому це відмінний спосіб розробки компіляторів. які охоплюють всі типи апаратних платформ.
Відео: The GCC Difference
Clang - це компілятор мов Сі, С ++, який транслює вихідний код в об`єктний код LLVM, а потім фреймворк вже проводить його оптимізацію і генерацію кінцевого коду. Clang добре інтегрується в графічне середовище розробки, дозволяє створювати більш зрозумілі повідомлення про помилки, а також підтримує більшість опцій GCC.
GCC
GCC (GNU Compiler Collection) - це набір компіляторів, що розвивається в межах проекту GNU. Також як і в Clang підтримується компіляція і генерація коду, для мов програмування Сі, С ++. GCC використовується в якості стандартних засобів розробки ядра Linux.
Розробка почалася ще в 1985 році Річардом Столманом. Зараз компілятор підтримує безліч мов програмування і архітектур. GCC розрахований на прямий процес складання програм - аналіз, перетворення, оптимізація, генерація коду. А тепер розглянемо більш детально відмінності програм.
Ліцензування та розробка
LLVM поширюється під більш вільною ліцензією - MIT / BSD, ви можете використовувати код проекту в комерційних цілях або навіть закритих програмах. Проект почав розроблятися в університеті штату Іллінойс, і спонсорував корпорацією Apple.
Відео: C ++ templates and optimizing for size
GCC має ліцензію - GPL, а це накладає деякі обмеження, ви не можете використовувати програму в закритих проектах. GCC розроблений спеціальним комітетом, в який розробники вибираються на індивідуальній основі. Проте розробкою керують такі компанії, як IBM, Red Hat, Sus, Google і Cisco.
продуктивність
Це один з головних параметрів порівняння. Обидва компілятора спочатку орієнтувалися на максимальну продуктивність, але історично так склалося що GCC домігся більшої продуктивності роботи. Але останні версії LLVM, схоже, вже подолали цей розрив. У деяких тестах Clang навіть обганяє GCC. Давайте розглянемо результати тестів від Phoronix для порівняння gcc або clang. Всі тести виконувалися в системі Core i7 6800K Broadwell-E:

У тесті FFTW, Clang як і раніше продовжує відставати. І нова версія навіть повільніше, ніж стабільна.

У тесті HMM ми теж бачимо, що Clang 4.0 продовжує регресувати.

Але ось в MAFFT, Clang 4.0 дуже сильно виріс.

Те ж саме ми бачимо в композитному тесті SciMark2.

У тесті SciMark2 Monte Carlo, Clang працює повільніше ніж GCC.


Тест ebizzy пройдено на відмінно.

Clang також швидше, ніж GCC в тесті компіляції ImageMagick.

І при компіляції PHP теж.
Але в багатопотоковому тесті Clang повільніше.

У кодуванні MP3 Clang досі не досяг рівня GCC.
Відео: Visual Studio with Clang

Особливості отриманого коду
Куди важливіше не сама продуктивність компілятора gcc або clang, а швидкість коду, який він буде генерувати. Компілятор Clang більш молодий, ніж GCC тому він генерує більше оптимізований код для архітектури x86 і x86_64.
Clang не так досяг успіху в варіанті з x86, але зате він генерує більш продуктивний код для архітектури ARM. Крім того, Clang не виконує спрощення вихідного коду, тому вся структура буде перенесена в готову програму. Це полегшує можливості налагодження, а також дозволяє робити деякі оптимізації на рівні вихідного коду.
висновки
У цій статті ми зробили огляд GCC vs Clang, порівняли ці два компілятора за їх особливостями, розглянули недоліки та переваги. Сподіваюся, ця інформація була вам корисною. А який компілятор ви надаєте перевагу для свого проекту? Напишіть в коментарях!
Популярні мови програмування linux
Статті про windows
Програмування під linux
Келебії докса - введення в програмування на go
Кращі онлайн компілятори
Як встановити tar gz в ubuntu
Vim vs emacs. Що краще?
Що краще deb або rpm
Чим архітектура arm відрізняється від x86
Порівняння mysql і postgresql
Відбувся реліз openmandriva lx 3.0
Порівняння openoffice і libreoffice
Вивчаємо sass. Стиль написання коду.
Установка pycharm ubuntu 16.04
Установка qt ubuntu 16.04
Таблична верстка vs блокова верстка
Продуктивність ubuntu 16.04 vs ubuntu 16.10
Продуктивність macos vs ubuntu 16.04
Порівняння arduino vs raspberry
Перетворення коду з es6 в es5.
Установка gcc в ubuntu 16.04
Відбувся реліз openmandriva lx 3.0
Чим архітектура arm відрізняється від x86
Порівняння mysql і postgresql
Продуктивність macos vs ubuntu 16.04
Валідність html-коду
Продуктивність ubuntu 16.04 vs ubuntu 16.10
Келебії докса - введення в програмування на go
Програмування під linux
Установка gcc в ubuntu 16.04