Дмитрий Андрич (Dimitry Andric) провёл (http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-September/05...) тестирование производительности компиляторов Clang 3.1 и Clang 3.2 в сравнении с GCC 4.2.1 и GCC 4.7.1 при сборке C и С++ проектов во FreeBSD 10.0-CURRENT. Тесты сосредоточены исключительно на оценке времени компиляции, измерение производительности выполнения итоговых исполняемых файлов планируется провести в будущем. При сборке использовались (http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-September/05...) предлагаемые по умолчанию опции оптимизации ("-O2 -pipe -fno-strict-aliasing" для Clang, "-O2 -pipe" для GCC).
В большинстве ситуаций Clang оказался быстрее GCC, при этом потребляя значительно меньше памяти. В некоторых тестах разрыв был значителен, например, при сборке большого C++ проекта gcc 4.2.1 выполнил сборку на 86% медленнее Clang 3.1 и потребовал на 217% больше памяти. GCC 4.7.1 сократил разрыв до 68% и потребовал на 220% больше памяти, чем Clang 3.1. Clang 3.2 оказался в среднем на 3% медленнее Clang 3.1, потребление памяти сохранилось на одном уровне.URL: http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-September/05...
Новость: http://www.opennet.me/opennews/art.shtml?num=34762
Не понимаю смысла подобных тестов. Время компиляции - ничтожная часть всего времени, затраченного на разработку проекта. А уж пользователям вообще пофигу, сколько времени вы его там компилировали, им важно чтобы программа быстро выполнялась (т.е. качество кода).
В процессе разработки как раз скорость компиляции важна -- если время сборки незначительно, можно прогонять автотесты каждые полчаса, а то и чаще. Очень помогает от тупых ошибок.
Вот только GCC может так долго и толство компилировать из-за оптимизации.
> Вот только GCC может так долго и толство компилировать из-за оптимизации.Да, при LTO и глобальной оптимизации память он жрет прилично. Но зато выдает на гора более шустрый и компактный код. Учтя что компиляция редко, а работа кода зачастую постоянно - странно экономить на фазе компиляции чтобы постоянно профукивать все полимеры на фазе выполнения.
>В процессе разработки как раз скорость компиляции важнанафиг не важна.
ну не поверю я, что вы все исходники сразу правите, что требует перекомпиляции всех obj-файлов.зыж
ну или у вас всё в одном, громадном файле.
ну или постоянно делаете make clean. или make mrproper.
О, как часто тычешься после одной кривой компиляции в ошибки сборки "уже исправленного" проекта, хотя "вроде всё что исправлено должно быть перекомпилировано", что частенько make clean рулит.
Но это ж надо иногда что-то писать и реально собирать самому, чтобы знать про эти грабли
>О, как часто тычешься после одной кривой компиляции в ошибки сборки "уже исправленного" проекта, хотя "вроде всё что исправлено должно быть перекомпилировано", что частенько make clean рулит.LOL
это функциональность make поддерживает даже БЕЗ написания правил.
ман суффиксные правила (suffixes)
и суффиксы по умолчанию
$ make -p|grep -i suffix
SUFFIXES := .out .a .ln .o .c .cc .C .cpp .p .f .F .m .r .y .l .ym .yl .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el
.SUFFIXES: .out .a .ln .o .c .cc .C .cpp .p .f .F .m .r .y .l .ym .yl .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el
И конечно же при изменении .h файла make сможет корректно найти все места, где этот .h используется и их перекомпилировать.
ну! не всё коту масленица! :D
тут придётся поработать. опять же http://en.wikipedia.org/wiki/Precompiled_header
ну если кому проще сделать make clean, чем добавить пару строчек в мэйкфайл, то при чём тут компилятор.зыж
ну и мир не закончился на make/autotools.
есть ещё scons, qmake наконец.
А! ещё кое-что по теме пспомнил (может кому будет интересно)
>$ man gccmakedep
>gccmakedep - create dependencies in makefiles using 'gcc -M'
>By default, gccmakedep places its output in the file named makefile if it exists, otherwise Makefile.с примером использования в мэйкфале
>EXAMPLE
> Normally, gccmakedep will be used in a makefile target so that typing 'make depend' will bring the dependencies up to date for the makefile. For example,
> SRCS = file1.c file2.c ...
> CFLAGS = -O -DHACK -I../foobar -xyz
> depend:
> gccmakedep -- $(CFLAGS) -- $(SRCS)так что всё решаемо
Ну, как бы, у gcc есть целая группа ключей (-M -MM -MD ...) связанная с построением файлов зависимостей, которые, в свою очередь, могут создаваться прямо при основной компиляции (без отдельного вызова компилятора/утилит) и includ'иться прямо в тот же Makefile (сразу всей кучей). В общем, имхо, проблема перекомпиляции только нужного при изменении какого-то header'a давно решена.
Если по каким-то причинам не подходит стандартный формат вывода зависимостей, то решается ключиком -M с последующим перенаправлением вывода на вход самописной/стандартной утилитки для преобразования/фильтрации.
а ещё можно, например, выкинуть make. я вот несколько лет назад выкинул — и как хорошо жить-то стало! как будто жмущие деревянные ботинки снял.
А что взамен?
Maven
на жабе (и скорее всего только ДЛЯ жабы)???
на xml??? где без IDE точно с ума сойдёшь?да даже вр.. бздишнегам не пожелаю! :D
> А что взамен?один из форков jam, сильно переработаный под мою специфику.
p.s. точнее, под специфику наших сборок, не только под мою.
CMake очень не плох http://ru.wikipedia.org/wiki/Cmake
особенно если нужно для мэйк/вс/хыкод генерить
и синтаксис простойзыж
но опять же - это замена аutotools/.., а не make.
а вот scons заменяет и аutotools, и make.
но на питоне, включая сценарии сборки ... что на любителя. но если любитель - профессионал в питоне, то может быть отличным выбором! :D
при наличии pkg-config автокрап вообще не нужен (а кто в pc-файлы не делает — тот ССЗБ). при необходимости конфигур-скрипт делается руками в несколько строчек. заодно там же можно проверить версию POSIX и систему. ну, и особого смысла в проектах, где уже нужен автокрап, штатно поддерживать что-то кроме gcc и clang нет.а если программа для сборки требует гвидобейсик… нененене, дэвидблэйн.
а без уничижительных, мещанских названий никак?зыж
>ну, и особого смысла в проектах, где уже нужен автокрап, штатно поддерживать что-то кроме gcc и clang нет.есть другое мнение - кроме поддержки gcc (ну, возможно(!!!), и то для бздишного менталитета, теперь и шланга) ничего и не нужно.
по крайней мере в POSIX'системах.
к тому же, нет ничего сложного и для icc (или любого другого) настроить. например http://stackoverflow.com/questions/1280418/how-do-i-get-auto...AC_PROG_CC([gcc icc])
$ ./confgure CC=icc
усё.
>а ещё можно, например, выкинуть make.можно.
а можно и не выкидывать, а просто разобраться в нескольких деталях и эффективно использовать.
отличная, расширяемая система.
> а можно и не выкидывать, а просто разобраться в нескольких деталях и
> эффективно использовать.а можно — выкинуть. что, у make, например, уже появилась вменяемая обработка подкаталогов? нененене, рекурсивные вызовы make не предлагать.
впрочем, любители make потому и не любители раскидывать части проекта по подкаталогам — потому что PITA.
> нененене, рекурсивные вызовы make не предлагать.это ещё почему?
хотя и без них можно - отличный механизм по принципу всё своё ношу с собой - в любой проект вместе с мэйкфайлом вставить можно весь каталог не напрягаясь вообще.> впрочем, любители make потому и не любители раскидывать части проекта по подкаталогам — потому что PITA
да что там сложного то?
all:
cd ./subdir1; make all
cd ./subdir2; make all
......................
cd ./subdirN; make all
забавно то, что мэйкофилы даже не понимают.хинт: дерево зависимостей.
суперхинт: общее.
суперсуперхинт: где?
гиперхинт: а зачем нужно общее дерево зависимостей?
> гиперхинт: а зачем нужно общее дерево зависимостей?затем, что в отдельных каталогах далеко не всегда живут библиотеки. впрочем, мэйкофилы скажут «это нинада!»
а им и НЕ НАДО там жить!!!зыж
ты откуда свалился то? у меня даже к Лунатикам таких вопросов нет.
не, ну зашибись, будем сырцы с библиотеками мешать!
>Ну, как бы, у gcc есть целая группа ключей (-M -MM -MD ...)именно поэтому я привел gccmakedep, а не makedepend.
см. пример - используются именно возможности gcc.
а сам gccmakedep всего-лишь:
$ file /usr/bin/gccmakedep
/usr/bin/gccmakedep: POSIX shell script, ASCII text executableзыж
но траблы всё-равно бывают иногда.
иногда встречается при многоплатформенной разработке с кучей специфичных ifdef с include.
но и тут, если не быдлокодить, то всё обходится.
> И конечно же при изменении .h файла make сможет корректно найти все
> места, где этот .h используется и их перекомпилировать.Сможет, ибо у нормальных людей dependency tracking используется в процессе разработки. Ну и пересобирается только то что зависело от этого .h файла. Как-то так, да.
makedepend
> И конечно же при изменении .h файла make сможет корректно найти все
> места, где этот .h используется и их перекомпилировать.Вы не поверите!
(секрет фокуса - см. ключи gcc -M -MM -MD -MMD и т. п.)
> всех obj-файлов.спалился ))) У нас они имеют расширение ".o" )))
obj-файлы - это не файлы с расширением .obj, чудик! :D
(кстати, винда .obj определит так - http://ru.wikipedia.org/wiki/Obj OBJ — это формат файлов описания геометрии)а вот определять принадлежность к типу файлов по расширению - ВОТ ЭТО ПАЛЕВО! :D
>$ man gcc
>...
>By default, the object file name for a source file is made by replacing the suffix .c, .i, .s, etc., with .o.o - всего-лишь расширение по-умолчанию obj-файла.
зыж
и ещё почитай мануалы на утилиту file
ну и узнай что такое /usr/share/misc/magic.mgc
ccache[+distcc] спасают в случаях чистых сборок
Причем местами очень нехило спасают
а местами очень не хило лажают.
примеры - в студию! или это просто было написано, дабы что-то написать?
p.s. это такой уж проект, что его используют очень многие и, в первую очередь, его тестируют на регрессию
> а местами очень не хило лажают.Это как?
да он и сам даже не объяснит, как.
просто нужно использовать кэш компайлера, тогда проблема скорости компиляции несколько отпадает. да и опция j тоже есть
хотя, не отрицаю того, что скорость сборки важна при сборке проектов с интенсивным изменением кода, когда кэширование слабо поможет.
> В процессе разработки как раз скорость компиляции важна -- если время сборки
> незначительно, можно прогонять автотесты каждые полчаса, а то и чаще. Очень
> помогает от тупых ошибок.Ставьте -O0, это ускорит компилятор в разы.
> Ставьте -O0, это ускорит компилятор в разы.а заодно усыпит некоторые варнинги и изменит поведение программы. happy debugging, bitches!
>> Ставьте -O0, это ускорит компилятор в разы.
> а заодно усыпит некоторые варнинги и изменит поведение программы. happy debugging, bitches!Только в случае, если код ногами писан.
> Только в случае, если код ногами писан.угу-угу. ты же, вроде, не «приветмирщик», а глупости городишь. ничего, что задействуются разные куски компилятора, например, в которых тоже могут быть ошибки? нет, ситуация не гипотетическая, а из большого проекта. где при -O0 считает нормально, а при -O2 — неверно, причём иногда и слабовоспроизводимо. из-за размеров проекта глазами по асму выяснить почти невозможно, по логам можно, но тоже удовольствие то ещё. зато рааааадости от того, что девелоперы показывают: «УМВР», а билды для тестеров — ёк. у меня таких примеров было достаточно, чтобы перейти на -O2 сразу, дабы разработчики видели то же самое, что и продакшн увидит. а тестеры не тестили две, по сути, разных версии программы, одна из которых не нужна вообще никому.
Про -O3 еще могу поверить. Про -O2 заливайте кому-нибудь другому, либо ссыль на багрепорт.
ну, не верь, чо. какая жалость: мне AlexAT не поверил! рыдаю весь просто.мне похрен, веришь или нет — я на это в проектах наступал. но ты, конечно, не верь: таки у тебя вышло убедить меня, что ты «приветмирщик». жаль. минус один адекват.
p.s. вот зачем выпендриваться было? спросил бы нормально — и код бы дал, и ссылку на тикет.
> а заодно усыпит некоторые варнингиточно? какие именно?
> и изменит поведение программы.
это да, бывает.
>> а заодно усыпит некоторые варнинги
> точно? какие именно?которые появляются после агрессивной оптимизации. например «использовано до того, как инициализировано». или про алиасинг.
Ну так надо же оправдать переход FreeBSD на Clang.
> Ну так надо же оправдать переход FreeBSD на Clang.Странно. Сегодня Зенитар - Кэп. При том вполне годный.
для бсд? нуну.
А если у тебя ферма для сборки?
Один из показателей эффективности компилятора.
> Один из показателей эффективности компилятора.Вот только почему-то про другие показатели бсдшники предпочитают не вспоминать. Зато на их несчастье это регулярно вспоминает фороникс, влобешник сравнивая 2 компилера в одинаковой конфигурации, где задом особо не поюлишь. И когда код нагенеренный шлангом сливает раза в три по скорости тому что нагенерил GCC - вот это лихо, да :)
> И когда код нагенеренный шлангом сливает раза в три по скорости тому что нагенерил GCC
> - вот это лихо, да :)займусь немного взаимоисключающими параграфами: а это тоже в большинстве случаев неважно. числодробилки пишет не так много народу, а в большой прикладухе время сборки может оказаться поважнее того, что выходной код немного медленней.
> займусь немного взаимоисключающими параграфами: а это тоже в большинстве случаев неважно.Да как сказать, зависит от того что считать большинством. Как для начала это большинство оценивалось? По всей планете прошел и статистику собрал кто и что компилит? :)
> Как для начала это большинство оценивалось?по примерному порядку человек, использующих числодробилки, и использующих прикладной софт. я не сомневаюсь, что ты и сам можешь это прикинуть, тут большой точности не надо.
> Один из показателей эффективности компилятора.причём достаточно маловажный. любители постоянно пересобирать мир могут уже нааскать у родителей на машины помощнее. ну, или у спонсоров.
остальным же намного более важно, какой код компилятор даёт на выходе. если он делает это за, в общем-то, разумное время и с нормальным потреблением ресурсов (случаи супероптимизации всей программы рассматривать не будем: понятно, что теоретически такой оптимизатор обставит всех; а практически пока он соберёт свой приветмир, у детей уже бороды до пола поотрастают).
пока что в этом плане кланг ничем особо похвастаться не может, увы. быть «не хуже» — это не достижение, это минимально необходимое условие. хотя и непростое, да. и за то время, пока кланг догоняет, gcc тоже на месте не стоит. и даже любители бсд постепенно осознают, что бывают версии gcc новее, чем 4.2 (вот этому факту я больше всего удивился).
> причём достаточно маловажный.для оценки самого компилятора? да, не особо интересен. для оценки потенциала, архитектуры - вполне годный. тут надо посмотреть через годик-другой. если так всё и останется - значит толку особого не будет.
> и даже любители бсд постепенно осознают, что бывают версии gcc новее, чем 4.2
ну как бы это нормально. собственно вопрос, что вкорячено в make.conf. и тут варианты только приветствуются. пусть пилят шланг, пусть пилит свой компилер интел, амд - это только плюсы.
ну дык я же не против, чтобы пилили. шланг — проект вполне достойный, и уже даже пригодный к использованию. пусть ещё расширения gcc научится понимать — и вообще хорошо будет.
> пока что в этом плане кланг ничем особо похвастаться не может, увы.
> быть «не хуже» — это не достижение, это минимально необходимое условие.В общем, да. Но в нынешнее время ещё один компилятор совершенно не повредит.
есть соурс-бейзед, есть разработчики дистров. Нельзя сказать что скорость сборки вообще никому не важна
> Не понимаю смысла подобных тестов. Время компиляции - ничтожная часть всего времени,Вона яЗен там внизу биёт себя пяткой в груди, что _каждый_ раз при запуске по 10-30% проигрыша есть афигенный чендж на 68% выигрыша один раз при сборке. Это Нужно, это Прогрессивно! Мы все охотно верим, что он приникся и погрузился в мир Будущего - мир континууса интергрейтуса, собирай на каждый чих, не запускай ни разу.
Да, мы не понимаем, но надо же быть благодарными за возможность прикоснуться в Будущему?!</футур>
Тесты это хорошо!! Выкинут наконец из "базы" gcc (обещали же!?), нам таааак полегчает.
+++Ждём FreeBSD 10 без gcc в базе Team, member #000001.
Ну вот зачем из письма, залетевшего в рассылку, делать новость на опеннете?
Давайте тогда уж по всем письмам в рассылке (и не только про хорошее) будем писать мегановости... - тем более, что по проблемам проекта есть куда более интересные письма.
Как будто бы в проекте уже вообще ничего не осталось делать - как только меряться скоростью сборки компиляторов...
> Ну вот зачем из письма, залетевшего в рассылку, делать новость на опеннете?Иначе форумные тролли отощают с голодухи :)
> Ну вот зачем из письма, залетевшего в рассылку, делать новость на опеннете?потому что давно не было срачей clang vs gcc.
Без размеров выходных файлов и их профилирования, эти тесты только для троллей.
По моим измерениям, размер выполняемых файлов процентов на 10% больше у clang (3.1), чем у gcc (4.6.2). С точки зрения производительности, на разных выполняемых файлах (содержащих boost юнит-тесты для проекта) то один, то другой лидировали с отрывом ~15%, хотя чаще все же gcc. Естественно, я компилировал значительно меньше кода, чем во FreeBSD, поэтому их статистика была бы гораздо интереснее.Таким образом, clang, как компилятор вполне подходит для постоянного девелопмента (т.к. действительно быстрее компилирует исходники и выдает более читабельные ошибки), хотя продакшн-релизы пока еще лучше собирать на gcc. Более того, gdb лучше работает с отладочной инфой от gcc, чем от clang, а для clang другого приличного отладчика (пока) нет (я в курсе про lldb - на текущий момент, он малопригоден для отладки под linux, по сравнению с gdb).
а tcc вообще всех порвет по скорости компиляции...
Прочитайте новость. Речь идет о C++, С'шные проекты может GCC оторваться.
> а tcc вообще всех порвет по скорости компиляции......зато проиграет по оптимизации и количеству поддерживаемых архитектур :P
А че по оптимизации? Он между прочим только инструкции процессора использует.
> А че по оптимизации? Он между прочим только инструкции процессора использует.Кирпичи то у всех одинаковые. Но у одних из них получаются дворцы, а у других - сараи.
Вывод: кроме кирпичей есть еще некоторая разница в том кто и как их разложит :)
Оке. А теперь приведите сравнение быстродействия проектов собранных с Clang и GCC. При этом на 2-3 различных (полностью) конфигурация. ИМХО, разница будет в другую сторону.Рабочие сборки вообще (для крупных проектов) запускают без оптимизации (если конечно не её тестируют). "Оптимизацию" кода тоже нет смысла проверять используя "оптимизацию при сборке", т.к. принято оперировать не секундами/минутами/часами, а кол-вом требующихся операций для выполнения той или иной части кода (при этом не стоит забывать и про "скорость" той или иной операции).
а вот это как в конце сообщения понимать?>Conclusion:
>-----------
>Both gcc 4.2.1 and 4.7.1 are the fastest compilers for building this specific large C++ library, but both versions of clang are not far behind. Both versions of gcc use quite a bit more memory than either version of clang.кто врёт-то?
а это некоторые анонимы в целях экономии моска ничего, кроме двух строчек в конце не читают.данный конкретный канклюжн относится к сборке boost.
ага, а некоторые только первые 2-е строчки.зыж
щечки, щечки подправь.
а то лопнут.
>> кто врёт-то?Кто кто? Автор новости. Точнее не врёт, а говорит полуправду, что считается хуже чем просто лгать. И что показывает его любовь к clang. Взял из трёх тестов результат одного, который его больше устроил, а остальные в новости вообще не упомянул.
> остальные в новости вообще не упомянул.Ну бсдшники же. Как обычно, свое - не пахнет.
тут уже видимо важна не новость кому-то а итоговый холивар... нафиг мне Clang если в зависимостях gcc если я не разработчик...
1. Clang компилит быстрее GCC - факт.
2. GCC оптимизирует программу лучше и на выходе программа работает быстрее чем собранная Clang - факт.Пользователям положить на 1, для них главное чтобы программа работала шустрее, и как следствие авторам програмы это тоже становится важнее.
Когда Clang дорастет до GCC по второму параметру и при этом сохранит первый(или хотя бы паритет), тогда ОК.
Вы не поверите, но компилятор нужен программистам. И скорость компиляции и понятность диагностики ошибок является достаточно важным параметром.
> Вы не поверите, но компилятор нужен программистам. И скорость компиляции и понятность
> диагностики ошибок является достаточно важным параметром....но не настолько чтобы простить в 3 раза более тормознутый код, который еще и более пухлый к тому же зачастую.
> …но не настолько чтобы простить в 3 раза более тормознутый код, который
> еще и более пухлый к тому же зачастую.вполне настолько. например, некий большой рогалик на c++ (нет, даже не спрашивай; писал это не я) у меня клангом почти в два раза быстрей собирается, нежели gcc. тут речь идёт о разнице в минутах. оно, вроде бы, и не так важно, но в силу специфики написания этого рогалика после изменений может пересобраться чуть ли не половина кода. и пара часов в день — тю-тю, если активно фичи допиливать. а вот разницы в скорости работы собраного кода на глаз не заметно.
> оно, вроде бы, и не так важно, но в силу специфики
> написания этого рогалика после изменений может пересобраться чуть ли не половина
> кода. и пара часов в день — тю-тю, если активно фичи
> допиливать.Да, так и быть, шланг - хорошая штука для компиляции вот этого твоего конкретного рогалика на си++. Правда это интересует полтора землекопа на всю планету. Я в их число не попадаю :P.
> а вот разницы в скорости работы собраного кода на глаз не заметно.
Да уж, такое и на JS тормозить не будет, а время компиляции вообще станет нулевое. Если продолжить ту же логику чуть дальше.
> Да, так и быть, шланг - хорошая штука для компиляции вот этого
> твоего конкретного рогалика на си++.и подобных проектов. которые этим рогаликом не ограничиваются.
> Да уж, такое и на JS тормозить не будет, а время компиляции
> вообще станет нулевое. Если продолжить ту же логику чуть дальше.а вот про это ты бы лучше не говорил. внутренней структуры игры ты не знаешь, и сколько всего там происходит, тоже. рогалик, кстати, в графике, и даже с какой-никакой анимацией. и между ходами считает всего немало, в том числе и монстриков, которые живут сами по себе на всём уровне, а не только вокруг игрока. поверь, рогалик, где надо заметно долго ждать реакции компа на твой ход, очень быстро начинает раздражать.
а нефиг было с таким умным видом вот тут make выкидывать :D
http://www.opennet.me/openforum/vsluhforumID3/86346.html#48
>а ещё можно, например, выкинуть make.зыж
брехня это всё.
за 20-30 минут ВСЕ кеды и вмести с Qt компилятся. (как гентушник говорю)даже при условии, что этот сферический "рогалик" размером с Qt (а я не верю в такие рогалики), даже если компиляция идёт на атомах (очень серьёзная контора видимо!), даже если команда не из тех кому думать, а только прыгать (любое изменение в исходниках приводит к перекомпиляции и пересборке!!! самое время кричать - выкинуть make! :D), даже если этот супер-дупер РОГАЛЪ собирается не частями, а целиком и несколько раз в день (архитект видимо тоже из тех кто прыгает), то и то такие трагические выводы НЕ ПОЛУЧАЮТСЯ.
и это если над проектом "прыгает" куча людей одновременно. :D
> а нефиг было с таким умным видом вот тут make выкидывать :Dа нефиг балаболить, если ни проекта, ни системы сборки не видел.
хотя что это я… у тебя же libastral, ты лучше меня всё знаешь. и как проект был сделан изначально, и как развивался, и почему он так собирается…
впрочем, радуйся, что не увидишь: сбрендил бы ещё больше, стал бы напрямую с космическим разумом беседовать.
p.s. откуда у тебя там взялись «конторы» и «архитекты» — я тем более не знаю. видимо, таки космический разум нашептал.
>> а нефиг было с таким умным видом вот тут make выкидывать :D
>а нефиг балаболить, если ни проекта, ни системы сборки не видел.я и вижу, что ты либо нифига не видел, либо дальше быдлокодерства не ушёл.
>хотя что это я… у тебя же libastral, ты лучше меня всё знаешьlibastral? не, этот быдлокодерский термин не знаю.
а вот лучше тебя знаю? да, практически уже уверен в этом.зыж
>p.s. откуда у тебя там взялись «конторы» и «архитекты» — я тем более не знаю. видимо, таки космический разум нашептал.котора? это синоним фирмы, коллектива, комьюнити или любой другой формы коллективной разработки.
хотя одинокому быдлокодеру не понять.
архитект? это архитектор проекта. при этом все будут собирать и складывать своё в совместный проект только по его указанию "когда" и "как".
опять же, одинокому быдлокодеру не понять.
зато понятно какого уровня рогалики ты в одиночку пишешь? :D
ясно. дегенерация прогрессирует, но Мнение Имеешь. ну, имей дальше, я в этом больше участия не принимаю. abtreten!
я и не удивлён :D
ну ещё бы ты своему дегенератизму удивлялся. привык же давно.
ну тебе вообще верить нельзя! :D
обещал свалить и вот он, опять! :Dзыж
пишу вообще только по одной причине - поржать! :D
> Да уж, такое и на JS тормозить не будет, а время компиляции
> вообще станет нулевое. Если продолжить ту же логику чуть дальше.Компиляция - это не только перевод на ассемблер, но и статическая проверка кода. Как там у JS с этим?
> ...но не настолько чтобы простить в 3 раза более тормознутый код, который еще и более пухлый к тому же зачастую.Бред.
> Бред.Форониксу с их бенчами расскажи. Почему-то код сгенеренный шлангом проигрывает в вообще всех тестах кроме 1-2 по жизни. В некоторых местах - очень люто, в несколько раз.
>> Бред.
> Форониксу с их бенчами расскажи. Почему-то код сгенеренный шлангом проигрывает в вообще
> всех тестах кроме 1-2 по жизни. В некоторых местах - очень
> люто, в несколько раз.Всего-то на 10-30%. Это не "несколько раз".
30% - это выкинуть больше чем одно ядро из моего 4-х-ядерника.
думаю хоть с памятью там не такие же проблемы?
Помоему у gcc на данный момент лучьше поддержка С++ чем у шланга, или нет? Как у шланга с С++11?
http://clang.llvm.org/cxx_status.html
http://gcc.gnu.org/projects/cxx0x.htmlСудя по таблицам у Clang дела чуть лучше.
У него в основном плохо с оптимизацией (в некоторых случаях GCC его разрывает буквально в разы) и с сборкой всего и вся (можно в 2 счета налететь на internal error).
Попробуйте последний стабильный релиз (3.1) - там они значительно улучшили дело, даже по сравнению с 3.0
> Попробуйте последний стабильный релизНе вижу смысла. Reason: clang не поддерживает половину архитектур с которыми я работаю на регулярной основе.
>> Попробуйте последний стабильный релиз
> Не вижу смысла. Reason: clang не поддерживает половину архитектур с которыми я
> работаю на регулярной основе.Да ладно! User294, не ври.
Clang уже умеет что-то кроме x86 и кое-как (т.е. условно) ARM?
> Clang уже умеет что-то кроме x86 и кое-как (т.е. условно) ARM?Ну LLVM теоретически умеет много чего... а практически чаще всего получается сферический конь в вакууме. Ну это как обычно у бсдшников.
> Да ладно! User294, не ври.Ну тогда скажи как мне шлангом бинарь для Atmel AVR получить? Да и для Cortex M3 там когда я смотрел - все было на удивление криво. То-есть, в теории его убедить можно. На практике - через ту еще ж. Не говоря о том что GCC оптимизит намного лучше.
>> Да ладно! User294, не ври.
> Ну тогда скажи как мне шлангом бинарь для Atmel AVR получить?Когда всякие там ПЛМ дорастут до уровня микропроцессора, тогда и спрашивай.
> Когда всякие там ПЛМ дорастут до уровня микропроцессора, тогда и спрашивай.Незнание предмета детектед. ПЛМ (ПЛИС) - это всякие там альтерки и прочие. ARM - это RISC-микропроцессор.
Наткнулся недавно на несоответствие между clang и gcc.
Думал ошибка первого. Оказалось, наоборот: gcc не держит стандарт.A a(B(c));
в коде должно разрешаться как объявление функции, принимающий параметр B, а не как (как могло бы показаться и проглатывает gcc) создание переменной a с приведением переменной c к типу B (п. 8.2 драфта).
напиши репорт, ребята из gcc такие фишки вполне чинят.но c++ всё-таки атомная хрень.
> A a(B(c));
> в коде должно разрешаться как объявление функции, принимающий параметр B, а не
> как (как могло бы показаться и проглатывает gcc) создание переменной a
> с приведением переменной c к типу B (п. 8.2 драфта).Вы про такое, где если добавить "typedef int B;", то скомпилируется только с предупреждением?
$ echo '
a(B(c));int main () { return 0; }
' | gcc -x c -
<stdin>:2:3: error: unknown type name ‘B’По (единственной) ошибке clang сложно понять, считает ли он B(c) объявлением функции:
$ echo '
a(B(c));int main () { return 0; }
' | clang -x c -
<stdin>:2:3: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
a(B(c));
^
<stdin>:2:5: error: a parameter list without types is only allowed in a function definition
a(B(c));
^
<stdin>:2:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
a(B(c));
^
2 warnings and 1 error generated.
Когда не могут меряться производительностью кода, начинают выкатывать вот такие вот "результаты". И типа они на коне, хоть в чём-то.
На 86% медленнее это на 14% быстрее с другого конца?
Тебя надо в ЦентрИзбирКом :)
С другого конца будет 714%
146% же
> 146% же100% = 100
100 - 86% = 14С другой стороны:
14 = 100%
100 = ?
42
> 42100 - это 42% от 14 ??? :)