Порівняння 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, порівняли ці два компілятора за їх особливостями, розглянули недоліки та переваги. Сподіваюся, ця інформація була вам корисною. А який компілятор ви надаєте перевагу для свого проекту? Напишіть в коментарях!

Поділися в соціальних мережах:

Схожі
Відбувся реліз openmandriva lx 3.0Відбувся реліз openmandriva lx 3.0
Чим архітектура arm відрізняється від x86Чим архітектура arm відрізняється від x86
Порівняння mysql і postgresqlПорівняння mysql і postgresql
Продуктивність macos vs ubuntu 16.04Продуктивність macos vs ubuntu 16.04
Валідність html-кодуВалідність html-коду
Продуктивність ubuntu 16.04 vs ubuntu 16.10Продуктивність ubuntu 16.04 vs ubuntu 16.10
Vim vs emacs. Що краще?Vim vs emacs. Що краще?
Келебії докса - введення в програмування на goКелебії докса - введення в програмування на go
Програмування під linuxПрограмування під linux
Установка gcc в ubuntu 16.04Установка gcc в ubuntu 16.04
» » Порівняння gcc vs clang