LINUX.ORG.RU

gcc vs clang

 , ,


0

2

При прочих равных, какой компилятор вы выберете и почему?

Важно 1: если вы разработчик ядра, то выбор очевиден, условие прочих равных не работает.

Важно 2: варианта «всё равно» нет, постарайтесь задать себе этот вопрос и найти на него ответ.

Важно 3: если у вас FreeBSD, то отвечать не надо. Опрос пользователям Linux.

Причины выбора оставляем в комментариях.

  1. gcc 360 (73%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. clang 130 (27%)

    *******************************************************************************************************************

Всего голосов: 490



Проверено: Satori ()
Последнее исправление: a1batross (всего исправлений: 1)

Ответ на: комментарий от Siborgium

К сожалению, в последнее время clang сильно отстает.

Он всегда отставал, в плане адекватности его разработчиков. А всё остальное - только последствия.

firkax ★★★★★
()

gcc лучше умеет в оптимизаицю из коробки, у шланга мощный анализатор кода, поэтому по классике умные люди используют шланг в ide в процеесе написания и gcc в процессе компиляции

sparks ★★★
()
Ответ на: комментарий от hobbit

Поэтому пока есть возможность — сижу на gcc.

Она всегда будет. Компилятор сам по себе не портится от времени, формат исполняемых файлов (elf) устоялся и не видно предпосылок к появлению новых, архитектура (i386/amd64/arm/arm64) тоже. Так что gcc, даже не самые новые версии, будет пригоден для компиляции под любые будущие платформы, пока они вообще похожи на обычные компы (т.е. не «квантовые» или подобная экзотика, но так вообще всё по-другому).

firkax ★★★★★
()
Ответ на: комментарий от Scondo

А как только разработчик использовал расширения языка из GCC - при установке становится можно использовать только GCC.

Ну так и ставь gcc, в него фичи для того и добавили чтобы повысить эффективность разработки программ, а не для того чтобы все боялись их использовать. Ещё совместимостью с turbo c++ озаботился бы.

firkax ★★★★★
()
Ответ на: комментарий от Scondo

При этом настоящая-то проблема Хрома не в том, что он один, а в том, что вся разработка под контролем Гугла. И этот контроль выглядит с каждым днём всё меньше оглядывающимся на стандарты (см. ситуацию с QUIC).

Нет, разработка одного браузера всегда будет под контролем кого-то одного. Будь то гугл, микрософт или мозилла. Так что проблема как раз в том, что он один. На стандарты плевать, они не самоценны, главное чтобы уже имеющееся не ломалось. Если есть 3 разных браузера с сопоставимыми долями, то веб-разработчики разберутся какую часть чьего функционала и как использовать. То, что из этого выйдет, и будет настоящим стандартом - и руководством по созданию нового браузера (у которого ещё нет доли, ну а когда будет он тоже поучаствует во внедрении новых своих фич).

firkax ★★★★★
()
Ответ на: комментарий от firkax

Нет, разработка одного браузера всегда будет под контролем кого-то одного.

Ну то есть вы считаете что нужно иметь, например, три разный Unix-совместимых системы с сопоставимыми долями? А доминирование разнообразных сортов одного и того же Linux - это проблема?

Scondo
()
Ответ на: комментарий от firkax

в него фичи для того и добавили чтобы повысить эффективность разработки программ

А получается по факту аналог Embrace, Extend, and Extinguish. Только с продвижением GPL вместо MS.

Или во славу GPL этично использовать все грязные трюки за которые ругаем MS?

Scondo
()
Ответ на: комментарий от untitl3d

с современными подходами с++ в контексте обильного использования метапрограмирования и compile time фич, в нём по дефолту нет адекватных сообщений об ошибках)))

sparks ★★★
()
Ответ на: комментарий от Scondo

А как только разработчик использовал расширения языка из GCC - при установке становится можно использовать только GCC.

Значительная часть расширений GCC реализованы в clang. Проще перечислить НЕ реализованные.

Siborgium ★★★★★
()
Ответ на: комментарий от Siborgium

Проще перечислить НЕ реализованные

Причём местами вполне себе справедливо не реализованные. Те же nested functions (лямбды) ужасны. clang blocks в этом плане куда интересней.

А по сабжу, колеблясь, но всё-таки, как компилятор общего назначения выберу gcc.

SkyMaverick ★★★★★
()
Последнее исправление: SkyMaverick (всего исправлений: 1)
Ответ на: комментарий от Scondo

Ну то есть вы считаете что нужно иметь, например, три разный Unix-совместимых системы с сопоставимыми долями?

В той сфере где его ставят малоразумные домохозяйки (десктоп и сервера домашних страничек) - да. Для более серьёзного уже не обязательно, там под свои нужды и так доработают что угодно.

А доминирование разнообразных сортов одного и того же Linux - это проблема?

Проблема, да.

firkax ★★★★★
()
Ответ на: комментарий от Scondo

Или во славу GPL этично использовать все грязные трюки за которые ругаем MS?

Не знаю за что тут ругать. Новые фичи, если они не в ущерб качеству (тяп ляп побыстрее) - всегда хорошо. А тот, кто их первым реализовал, получает заслуженную долю пользователей.

Си всегда развивался именно так, а стандарт это только закрепление и обобщение уже достигнутого.

У компилятора есть единственная функция - помогать своим пользователям генерировать бинарники с заданными требованиями. Чем лучше он её выполняет - тем он лучше.

firkax ★★★★★
()
Ответ на: комментарий от Scondo

Ну то есть вы считаете что нужно иметь, например, три разный Unix-совместимых системы с сопоставимыми долями?

Я не он, но это было бы очень здорово. Например, монолитный Linux, микроядерный Hurd и ярко-десктопно-ориентированный Haiku (хоть это и не совсем unix). Области применения сильно пересекаются, хоть и не совсем совпадают, они вполне могли бы соревноваться друг с другом. Осталось дело за малым: допилить Hurd и Haiku. :)

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от sparks

gcc лучше умеет в оптимизаицю из коробки, у шланга мощный анализатор кода, поэтому по классике умные люди используют шланг в ide в процеесе написания и gcc в процессе компиляции

Два чая этому господину. Можете забрать со столика где ТС сидит.

dimgel ★★★★★
()

проголосовал два раза за gcc.
закрывайте ваш шланг

darkenshvein ★★★★★
()

Проголосовал за gcc.

А так Visual C++ конечно же :)

fsb4000 ★★★★★
()
Ответ на: комментарий от untitl3d

У gcc были более адекватные сообщения об ошибках: имя файла, номер строки, название ошибки (всё влезает в одну строчку вывода). Потом они взяли пример с дурацкого цланга и начали на каждую ошибку/варнинг выдавать бесполезную простыню. И даже флага вернуть нормальный режим не оставили.

firkax ★★★★★
()

gcc, потому что что за clang такой вообще? Зачем?

Dog ★★★
()

Когда-то молился на всякое ЛСДП, сейчас ctags юзаю, шустро и надёжно.

Один плюс в шланге вижу - плагинью всякое в нём писать можно более-менее комфортно, ибо есть какая-то документация. В ГЦЦ же я залез с желанием написать плагин и не разобрался до конца, чувство, что мало кто понимает его ливер (судя по статьям на данную тему). Возможно через боль и слёзы я бы осилил, но оказалось сильно понятней пойти на шланг, там примеров на эту тему больше. В принципе, ГЦЦ может это исправить.

А так пользуюсь ГЦЦ. Шлангом иногда смотрю на особо забористую ошибку, которую сложно понять в интерпретации ГЦЦ (возможно это и в другую сторону работает в каких-то кейсах).

kvpfs ★★
()
Ответ на: комментарий от kvpfs

В ГЦЦ же я залез с желанием написать плагин и не разобрался до конца

Это да, gcc не особо модульный. И не особо понятный изнутри для тех кто не его разработчик.

В принципе, ГЦЦ может это исправить.

Подозреваю что это только полным рефакторингом исправляется. То есть, в контексте компилятора, как писать почти с нуля. Так что лучше пусть не пытаются.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Подозреваю что это только полным рефакторингом исправляется. То есть, в контексте компилятора, как писать почти с нуля. Так что лучше пусть не пытаются.

Я в смысле выпустить какой-то гид по написанию плагинов, детально со всеми нюансами по проходу через АСТ. Есть на эту тему несколько годных статетй, но как помню - полной картины они не дают, короче там много надо методом тыка делать, странная ситуация, можно же выделить немного времени на одну годную статью, плагины после этого пойдут как пирожки.

kvpfs ★★
()
Последнее исправление: kvpfs (всего исправлений: 1)
Ответ на: комментарий от kvpfs

Не пойдут. Там проблема не в отсутствии документации, а в том, что нет апи для создания плагинов. Даже если документация будет, она будет такой замудрёной что её всё равно никто, кроме разработчиков gcc, не поймёт.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

АПИ есть и плагины можно свои подцеплять в ГЦЦ. Регистрируешь хендлер на какое-то событие (например, построение АСТ модуля) и ГЦЦ дергает твой плагин. Если память меня не подводит, то препядствием для меня стала непонятность структуры АСТ - типы узлов и отсутствие каких-то подробных примеров того, как с ними работать, всё через изучение исходников. В общем хлопотно было, а рядом стоял шланг, для которого инфы было больше, я на нём поделку и запилил в итоге.

kvpfs ★★
()
Ответ на: комментарий от Siborgium

Стандарт пишется по компиляторам, а не наоборот.

Ох уж спорно. Многие предложения в комитете вносятся не авторами компиляторов. А некоторые штуки из компиляторов попасть в стандарт не могут много лет.

rumgot ★★★★★
()
Ответ на: комментарий от kvpfs

Ну, оно формально есть а по факту для его использования надо изучать внутреннее устройство компилятора, те самые непонятные структуры (а местами и логику наверно). Бывает, когда апи делается с самого начала для удобства плагинов к нему, а затем реализация этого апи прикручивается к хост-приложению. А бывает, когда апи это просто вынесенные в паблик внутренности приложения, а как с ним подключиться - думают уж авторы плагинов.

firkax ★★★★★
()
Ответ на: комментарий от hobbit

а чем Хайку не устроила?

Тем же, чем AmigaOS/AROS и прочие странные доисторические оси - их интерфейсы так и остались гиковскими поделиями из 90х. Красиво, но не слишком юзабельно в более-менее массовом порядке.

Я бы на свежую SerenityOS ставил)

devl547 ★★★★★
()
Ответ на: комментарий от rumgot

Только в итоге всё равно важна именно поддержка чего-то компиляторами, а не теоретические изыскания стандартописателей. Стандарт это средство коллективного обсуждения необходимости каких-то фич, в тех местах где авторы компиляторов не имеют окончательного (своего) мнения на этот счёт. Если стандартописатели берут на себя что-то большее (пытаются взять роль директивного органа) - они просто отрываются от реальности, обычно они так не делают (но частично случилось в С99).

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ну вот возьмем например внедрение в стандарт networking, который все до этого самого стандарта не долетит. Он возник не в каком нибудь компиляторе, а как отдельный проект (asio).

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от sparks

Адекватных - нет, это так. А сообщения все равно лучше, чем у GCC. Я так на clang и пересел в свое время.

aist1 ★★★
()
Ответ на: комментарий от Slackware_user

Я пока пытаюсь для генту flang собрать. Даже он память отжирает при сборке

grem ★★★★★
()
Ответ на: комментарий от firkax

Подозреваю что это только полным рефакторингом исправляется.

Там еще надо Столлмана урезонить. Что посложнее полного рефакторинга будет. Столлман до сих пор против модуляризации GCC по образцу Clang. Проприетарщики набегут и раздербанят, потому что.

aist1 ★★★
()
Ответ на: комментарий от rumgot

Не понял, пример чего это?

Не особо пользовался c++, тему gcc vs clang рассматривал как выбор си-компилятора. От boost всегда создавалось тягостное впечатление. В Си «networking» в стандарте уже есть - это berkeley sockets. И плевать, что это не C89/C99/подобное, а POSIX, это источник не менее (а то и более) авторитетный чем эти документы, когда дело касается не синтаксиса языка, а системной библиотеки.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от kvpfs

Просто для информации. Плагины в Clang есть, но толку от них не сильно много. Плагин работает не только после парсинга, но и после вывода типов и инстанцирования шаблонов, что во время парсинга и происходит. И, хотя готовый AST, в принципе, можно менять, но выглядеть это будет совсем не «плагинно». «Плагинов парсера», к сожалению нет, а хотелось бы.

Т.е. плагины сделаны преимущественно для анализаторов кода, а не для расширения возможностей компилятора. Типа, раз, и у тебя новый оператор. Так нельзя. Даже тупо свой атрибут сделать нельзя. Все незнакомые атрибуты удаляются из AST сразу при парсинге, и сделать с этим ничего нельзя. Последнее вообще огорчает.

aist1 ★★★
()
Ответ на: комментарий от firkax

Ну как сказать. Он просто отдает плодоносную поляну clang-щикам. Его позиция имела обоснование, когда из свободных компиляторов был только GCC. Но теперь ситуация сильно изменилась. Все кавалеры танцуют clang, а gcc продолжает строить из себя неприступную принцессу. Вот только часики у принцессы тикают.

aist1 ★★★
()
Ответ на: комментарий от Slackware_user

Что-то он даже в 1 поток памяти хочет больше чем clang во время сборки в 2 потока. Что они туда понапихали?

grem ★★★★★
()

gcc, потому что три буквы набирать проще, чем пять (да, про алиасы я знаю). Технические аспекты для моих хеллоуворлдов не важны. Хотя модульность и отсутствие легаси, о которых я узнал из комментариев, мне импонируют больше.

А лицензия компилятора не важна вообще ни для кого, покуда она свободная. Программист, если только он не разрабатывает сабж, – такой же пользователь компилятора, как секретарша – офисного пакета.

Bagrov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.