Сравнение GCC vs Clang

Как вы знаете, все программы представляют из себя набор машинных команд, для преобразования программного кода в машинные команды используются компиляторы. GCC и LLVM Clang — это два самых популярных на данный момент компилятора, которые используются для компиляции программ в различных дистрибутивах.

Они оба поддерживают самые новые возможности языков программирования и работают достаточно быстро. Но у каждого из них есть свои преимущества и недостатки. В этой статье мы попытаемся выполнить сравнение GCC vs Clang. Мы сравним их особенности и производительность, основываясь на тестах от phoronix. Но сначала давайте рассмотрим основные отличия.

LLVM Clang

Разработка набора компиляторов LLVM Clang началась в 2003 году. LLVM — это не компилятор какого-либо определенного языка, а скорее основа, которая используется для генерации объектного кода для любого вида исходного кода. Проект содержит широкий спектр инструкций, поэтому это отличный способ разработки компиляторов. которые охватывают все типы аппаратных платформ.

Clang — это компилятор языков Си, С++, который транслирует исходный код в объектный код LLVM, а затем фреймворк уже проводит его оптимизацию и генерацию конечного кода. Clang хорошо интегрируется в графическую среду разработки, позволяет создавать более понятные сообщения об ошибках, а также поддерживает большинство опций GCC.

GCC

GCC (GNU Compiler Collection) — это набор компиляторов, развиваемый в пределах проекта GNU. Также как и в Clang поддерживается компиляция и генерация исполняемого кода для языков программирования Си, С++. GCC используется в качестве стандартных средств разработки ядра Linux.

Разработка началась еще в 1985 году Ричардом Столманом. Сейчас компилятор поддерживает множество языков программирования и архитектур. GCC рассчитан на прямой процесс сборки программ — анализ, преобразование, оптимизация, генерация кода. А теперь рассмотрим более подробно отличия программ.

Лицензирование и разработка

LLVM распространяется под более свободной лицензией — MIT/BSD, вы можете использовать код проекта в коммерческих целях или даже закрытых программах. Проект начал разрабатываться в университете штата Иллинойс, и спонсировался корпорацией Apple.

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.

Особенности полученного кода

Куда важнее не сама производительность компилятора gcc или clang, а скорость кода, который он будет генерировать. Компилятор Clang более молодой, чем GCC поэтому он генерирует более оптимизированный код для архитектуры x86 и x86_64.

Clang не так преуспел в варианте с x86, но зато он генерирует более производительный код для архитектуры ARM. Кроме того, Clang не выполняет упрощение исходного кода, поэтому вся структура будет перенесена в готовую программу. Это облегчает возможности отладки, а также позволяет делать некоторые оптимизации на уровне исходного кода.

Выводы

В этой статье мы сделали обзор GCC vs Clang, сравнили эти два компилятора за их особенностями, рассмотрели недостатки и преимущества. Надеюсь, эта информация была вам полезной. А какой компилятор предпочитаете вы для своего проекта? Напишите в комментариях!

6 комментариев

  1. mnbvcxeert Декабрь 25, 2016 Ответить
    • Adekvatniy Июнь 29, 2017 Ответить
      • Дима Core Декабрь 9, 2017 Ответить
  2. Qnx Май 22, 2018 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: