Разработчики коммерческого статического анализатора PVS-Studio выполнили (http://www.viva64.com/ru/b/0383/) проверку библиотеки GTK+. В целом, в основном выявлены опечатки и мелкие недочеты. Из потенциальных ошибок, требующих анализа и исправления, упоминается приведение знакового типа к беззнаковому, указание оператора '=' вместо '==' в сравнении, использование одной переменной для внешнего и вложенного циклов, возможный выход за границы массива, отсутствие проверок на нулевые указатели.
URL: http://www.viva64.com/ru/b/0383/
Новость: http://www.opennet.me/opennews/art.shtml?num=44070
чет дохрена пвс студии стало - совсем не покупают что ли?
Причём раньше они хоть какой-то уровень своего спама поддерживали -- иногда там даже были куски забавного кода. А что теперь? 3 строки о факте проверки. Фу!
И главное ж лезут повсюду... Опеннет, ЛОР. Везде все засрали :(
Главное к опенсорсу никак не относятся. Требуют вьюжлстудию, которой никто из вменяемых разработчиков уж лет 5 не пользуется из-за плохой поддержки стандартов. Полный КГ/АМ.
А чем вменяемые пользуются, простите?
Вменяемые пользуются всем тем, куда g++ можно прикрутить без танцев с бубном. QtCreator, нпаример.
> А чем вменяемые пользуются, простите?Gcc и clang с редактором или ide на выбор. А MSVC не умеет C99 в 2016 году, это не инструмент а пародия.
> Без clang это не инструмент а пародия.Visual Studio умеет в clang. Пруф: http://i.imgur.com/UKjpoER.png
> Visual Studio умеет в clang. Пруф: http://i.imgur.com/UKjpoER.pngКто будет доделывать за микрософтом их сопли и что о них можно сказать - понятно. В опенсорсе таким личностям ничего не светит - склад ума не тот. Можно быть уверенным на 99% что такие лица не освоят git даже на уровне джуниор вебдева. Отработанный материал, который пойдет на дно вместе с MS и их технологиями.
> Visual Studio умеет в clang. Пруф: http://i.imgur.com/UKjpoER.png
> Для установки требуется 9ГБ на всех дискахочешуеть
> 9 ГбЭто перемоґа!
Там видновс10 в комплекте
Как же быстро люди объединяются против чужого успеха.
Ребята делают анализ многих открытых продуктов. И очень интересно читать такие статьи, т.к. можно увидеть и свои огрехи. Плюс приходит понимание чего нужно избегать, чтобы потом долго и нудно не искать трудноотловимые баги.
Если кому-то не нравится их продукт - хоть аргументируйте. А лучше не читайте вовсе, проходите мимо.
О, флюродросеры приехали. Статьи (скорее, статья) про огрехи была бы действительно полезна, но для этого же нужно проанализировать кучу проектов, классифицировать проблемы, выделить общие причины их возникновения и подробно про это рассказать. Или просто привести весь список своих правил анализа, на что они никогда не пойдут. Но нет, они раз в неделю прогоняют новый проект и пишут бесполезную статейку в которой и читать-то нечего: в очередной раз перепутали местами аргументы memset да условие скопипастили неправильно.> Если кому-то не нравится их продукт - хоть аргументируйте.
Сто раз уже аргументировали чем не нравится, разуйте глаза. Во-первых, это проприетарное гoвнецо которое работает только под windows. Во-вторых, они паразитируют на СПО, нечего в него не отдавая (да, _ничего_. я знаю что они отсылают найденные "баги", но толку от это нет потому что статический анализ должен проводиться регулярно, о чём они и сами пишут).
> А лучше не читайте вовсе, проходите мимо.
Это вы проходите мимо. Не хватало проплаченных защитничков всякого крапа нам тут.
> О, флюродросеры приехали. Статьи (скорее, статья) про огрехи была бы действительно полезна,
> но для этого же нужно проанализировать кучу проектов, классифицировать проблемы, выделить
> общие причины их возникновения и подробно про это рассказать. Или просто
> привести весь список своих правил анализа, на что они никогда не
> пойдут. Но нет, они раз в неделю прогоняют новый проект и
> пишут бесполезную статейку в которой и читать-то нечего: в очередной раз
> перепутали местами аргументы memset да условие скопипастили неправильно.На самом деле у нас очень много хороших познавательных статей. Несколько примеров:
http://www.viva64.com/ru/l/full/
http://www.viva64.com/ru/a/0082/
http://www.viva64.com/ru/b/0374/
http://www.viva64.com/ru/b/0306/
http://www.viva64.com/ru/b/0265/
http://www.viva64.com/ru/b/0260/
http://www.viva64.com/ru/b/0253/
http://www.viva64.com/ru/b/0214/
http://www.viva64.com/ru/b/0287/Но помимо того, что мы занимаемся добрым и вечным, нам надо ещё показывать и напоминать людям о возможностях PVS-Studio. Другими словами, рекламировать наш продукт. И здесь статьи о проверке проектов работают как нельзя лучше. Поэтому мы писали, пишем и будем писать такие статьи. При этом они полезны нам, но и открытым проектам.
> гoвнецо которое работает только под windows.Работать она может в разных местах. Пример: Проверка Vim при помощи PVS-Studio в
GNU/Linux - http://www.viva64.com/ru/b/0311/Тут дело скорее в вопросе зарабатывания денег и сложности создания коробочного продукта.
> Во-вторых, они паразитируют на СПО,Паразит это тот кто что-то берёт в ущерб своего носителя и ничего не даёт взамен. Мы, во-первых, никакого ущерба СПО не наносим. Во-вторых, делаем его чуть лучше. Где же здесь паразитизм? :)
Здесь граждане верят в «стандарты Си»! — они точно знают, что код исполняется одинаково на всех процессорах и еще много всякого.
> Как же быстро люди объединяются против чужого успеха.
> Ребята делают анализ многих открытых продуктов. И очень интересно читать такие статьи,
> т.к. можно увидеть и свои огрехи. Плюс приходит понимание чего нужно
> избегать, чтобы потом долго и нудно не искать трудноотловимые баги.Большое спасибо за поддержку.
> Как же быстро люди объединяются против чужого успеха.Если ты придешь на микрософтовские форумы и там что-нибудь ляпнешь про Linux - тебя там быстренько забанят. Почему бы не поступать так же с MSовскими рекламерами?
> Ребята делают анализ многих открытых продуктов.
Исходники винды они не смогут проверять по техническим причинам. Интересная асимметрия, оказывается без опенсорса эти проприерасы даже пиариться не смогут. Огого.
> Если кому-то не нравится их продукт - хоть аргументируйте.
Так уже аргументировали - это ресурс про опенсорц. Какой смысл тут размахивать проприетарным плагином для студии? Это не течнет, а винда никак не основная платформа для gtk+. Факью, идите на винфаке спамить.
> Главное к опенсорсу никак не относятся. Требуют вьюжлстудию, которой никто из вменяемых
> разработчиков уж лет 5 не пользуется из-за плохой поддержки стандартов.По поводу Visual Studio Вы не правы. Это один из наиболее популярных и используемых инструментов разработки.
> По поводу Visual Studio Вы не правы. Это один из наиболее популярных
> и используемых инструментов разработки.Особенно у тех кто что-то связанное с gtk+ программирует. Если вы делаете продукт под винду и студию - при чем тут gtk+ разработчики, для начала? Идите и чикерьте свои сорцы винды и вьюжлстудии, если сможете.
> Идите и чикерьте свои сорцы винды и вьюжлстудии, если сможете.Можем. И занимаемся этим тоже.
Анализ С/C++ открытых проектов компании Microsoft:
• Проверка проекта Computational Network Toolkit (CNTK): http://www.viva64.com/en/b/0372/
• ChakraCore: analysis of JavaScript-engine for Microsoft Edge: http://www.viva64.com/en/b/0370/
• Проверка проекта CoreCLR: http://www.viva64.com/en/b/0310/
• Проверка Windows 8 Driver Samples: http://www.viva64.com/en/b/0199/
• Занимательная археология. Проверка Microsoft Word 1.1a: http://www.viva64.com/en/b/0245/
• А ещё мы находили ошибки в библиотеках Visual C++: http://www.viva64.com/en/b/0163/ , http://www.viva64.com/en/b/0288/
• Впрочем, нам далеко не всегда удается написать статью про ошибки, после проверки проектов от компании Microsoft. Не зря Microsoft славится ответственным подходом к разработке программного обеспечения и качественным кодом. Например, в проекте Casablanca я нечего не нашёл: http://www.viva64.com/en/b/0189/Также недавно в PVS-Studio мы поддержали анализ C# проектов. Анализатор C# пока не так мощен, как C++, но всё равно нам уже есть что показать:
• Analysis of .NET Core Libraries (CoreFX): http://www.viva64.com/en/b/0365/
• Проверка .NET Compiler Platform (Roslyn), приуроченная к выходу первой версии PVS-Studio, в которой был поддержан анализ C# проектов: http://www.viva64.com/en/b/0363/
• Analysis of Microsoft Code Contracts: http://www.viva64.com/en/b/0361/
• Проверка проекта Microsoft Orleans: http://shcherbak.me/post/139216516264/checking-microsoft-orl...
Я конечно понимаю что в пиарщики идут не гроссмейстеры, но догадаться насколько опеннетчикам интересен MS и их "опенсорц" не так уж трудно. В следующий раз попробуйте запостить пару страниц мана по системному программированию Linux где-нибудь на майкрософтовских ресурсах, там вам понятнее объяснят.
А откуда у вас право решать за всех их интерес к опенсорцу мс?
Пламенная любовь опеннетовских троллей к опенсорцу M$ - это их личные половые трудности, мы просто тактично стараемся этого не замечать.
Забавно. Часто не мы выкладываем какие-то новости. Просто людям нравятся наши заметки, и они хотят ими поделиться. Как например сейчас. Но нас всё журят за рекламу и спам. Интересно наблюдать со стороны.
> Но нас всё журят за рекламу и спам. Интересно наблюдать со стороны.Нас тоже журят, притом то за "рекламу", то за "про вас ничего не слышно". :)
Не принимайте близко...PS: хотя чем ближе к тематике ресурса, тем лучше, конечно.
>Нас тоже журят, притом то за "рекламу", то за "про вас ничего не слышно". :)Потому что ваша "реклама" - хуже, чем если "про вас ничего не слышно" было бы.
Промотал новости на опеннете до 2014: starterkits, госзакупки, бабах с лицензиями.
Причём, starterkits рекламирует страшный дизайн и падающие программы. А госзакупки и лицензии - проблемы и юридическую волокиту.
Вот таки дела.
P.S. Не в обиду, Миш. Знаю, говорят «критикуя - предлагай». Но мне нечего предложить.
А здесь не куски кода?
http://www.viva64.com/ru/b/0383/
Ты предлагаешь мне бегать по каким-то ссылкам чтобы ознакомиться с рекламой?
Это уже за гранью моего представление об адекватности...
> Ты предлагаешь мне бегать по каким-то ссылкам чтобы ознакомиться с рекламой?
> Это уже за гранью моего представление об адекватности...Ну так адекватнЕйте же наконец -- сами просили ("иногда там даже были куски забавного кода"), сами и обижаетесь, когда кто-то не поленился подсказать ответ.
А ребята нормальные, только бы и впрямь ещё под линукс спортировались, что ли...
>только бы и впрямь ещё под линукс спортировались, что ли...Вот именно, а то эти товарищи имеют наглость регулярно спамить рекламой своей PVS-Studio на сайтах для Linux, и при этом их продукт можно купить только как плагин к Microsoft Visual Studio, которая в свою очередь доступна только под ОС Windows. И после этого они удивляются негативной реакции Linux сообщества на их рекламу - мало того что PVS-Studio проприетарщина, так ещё и только под Windows да ещё и только под микрософтовский компилятор.
дружище, тебе забесплатно проверили твой любимый GTK+ на ошибки. Сказал бы спасибо.Версию под линукс они могут продать под заказ, коробочной нету.
то есть на складе есть, а в магазине нет? привезут только под заказ и без коробки?
чем отличается коробочная от некоробочной? за отсутствие коробки цену скинут?
> то есть на складе есть, а в магазине нет? привезут только под
> заказ и без коробки?
> чем отличается коробочная от некоробочной? за отсутствие коробки цену скинут?отличается совсем другим позиционированием. Почему-то, когда вам предлагают вместо пользования системой ковырять настройки пульсы, чтоб она не шипела, вы сильно обижаетесь на потеринга, возмущаетесь, почему нельзя сделать, чтоб просто работало и даже предлагаете скинуться на киллера.
Представьте, если б с вас за пульсу еще брали деньги.
Их никто не заставляется делать чтобы работало всегда и везде.
Есть ынтерпрайзный RHEL - пусть, например, сделают под него чтобы не шипело, остальное народ доделает, кому интересно.
А так - в сад.
Вот вы так говорите, как будто коммерческая компания вам чем-то обязана.Я уже лет 5 как пользуюсь только линуксом дома и на работе, считаю себя линуксоидом. И каждый раз, когда кто-то говорит, что линуксоиды упороты, я пытаюсь доказать, что это не так. Но вот вы очень красочно сейчас доказываете, что я не прав.
Вас возмущает новость о том, что есть только для винды и не оперсорс? — так ребята забесплатно проделали большую работу и сделали анализ опенсорс тулкита.
Вас обижает, что вам не дали версии под линукс? — так лично вам, тем более с таким отношением, никто и не даст. Но версия под линукс существует, а значит кому-то она понадобилась.> А так - в сад.
В сад — вам, в детский.
> Я уже лет 5 как пользуюсь только линуксом дома и на работе,
> считаю себя линуксоидом. И каждый раз, когда кто-то говорит, что линуксоиды
> упороты, я пытаюсь доказать, что это не так. Но вот вы
> очень красочно сейчас доказываете, что я не прав.А толку-то - "доказывать"? Если "Я уже лет 5 как пользуюсь только линуксом" с ником вендотроль не упоротый, то кто же тогда упоротый?
> А толку-то - "доказывать"? Если "Я уже лет 5 как пользуюсь только
> линуксом" с ником вендотроль не упоротый, то кто же тогда упоротый?Тот — кто считает, что ему обязан весь мир.
> Вот вы так говорите, как будто коммерческая компания вам чем-то обязана.Разумеется обязана. А что интересно, мы за свои деньги должны им ещё и дифирамбы складывать? Коммерческая контора = ориентация на прибыль, а не на качество, плюс навязчивая реклама, что эта шaрaшка отлично демонстрирует - каждую неделю гoвнocтатья, при этом linux версии нет, работают только с командами, и даже цену не озвучивают чтобы побольше содрать.
> так ребята забесплатно проделали большую работу и сделали анализ опенсорс тулкита
Я сделаю забесплатно большую работу и покрашу вам дверь кaкaшками, тоже не будете возмущаться?
> Но версия под линукс существует, а значит кому-то она понадобилась.Даже так? А сами-то они об этом где-то пишут или без клещей и везения не узнать? :)
2 Andrey Karpov: находится только http://www.viva64.com/ru/b/0153/
> Представьте, если б с вас за пульсу еще брали деньги.С нетерпением жду этого момента! Пользователи откровенного г-на должны приплачивать за свою глупость.
> за отсутствие коробки цену скинут?понятия не имею. Но я бы предположил, что итоговая цена будет, возможно, даже выше. Стоимость интеграции (чтоб не шипело) и поддержки, все-таки, будет немалая.
> дружище, тебе забесплатно проверили твой любимый GTK+ на ошибки. Сказал бы спасибо.
> Версию под линукс они могут продать под заказ, коробочной нету.команда cp сломалась?
> Версию под линукс они могут продать под заказ, коробочной нету.Версию под линукс они продать не могут. Вообще не могут, потому что её нет, и не предвидится. Представитель фирмы долго об этом распинался на ЛОРе и на своём сайте. Спрос недостаточен. "Под заказ" -- только если цена заказа оплатит работу нескольких высококлассных программистов. Это значит по несколько тысяч долларов в месяц каждому разработчику на время разработки, и ещё столько же одному-двум на всё время поддержки продукта. Они уже сочли нерентабельной урезанную версию для одного пользователя за 300(?) долларов. Продают только командам по цене ~1000 долларов за человека. Да, одиночка может купить, но не меньше 4 лицензий. Я бы это "коробочной" версией не назвал.
Боюсь, кончат как владельцы Watcom C или Stony Brook Pascal, которые сдохли, имея лучший товар в своей нише.
> Боюсь, кончат как владельцы Watcom C или Stony Brook Pascal, которые сдохли,
> имея лучший товар в своей нише.Ну насчет Watcom C -лучшим я бы его не назвал ,исследовал опен версию .Оптимизации с некоторыми ключами давали "странный код" ,что на ровном месте вызывали сегментные ошибки памяти .Хорошо что потом что GPL версию игры Jagged Alliance портировали для компилятора gcc ,и не пришлось дальше возиться с Watcom C.
> Версию под линукс они продать не могут. Вообще не могут, потому что
> её нет, и не предвидится. Представитель фирмы долго об этом распинался
> на ЛОРе и на своём сайте. Спрос недостаточен. "Под заказ" --
> только если цена заказа оплатит работу нескольких высококлассных программистов. Это значит
> по несколько тысяч долларов в месяц каждому разработчику на время разработки,
> и ещё столько же одному-двум на всё время поддержки продукта.Ну, я помню, что на хабре представители компании на вопрос о линукс версии предлагали общаться детально. Т.е., я сделал вывод, что сделать они ее могут. Этих деталей не знал.
> Ну, я помню, что на хабре представители компании на вопрос о линукс
> версии предлагали общаться детально. Т.е., я сделал вывод, что сделать они
> ее могут. Этих деталей не знал.Не читайте этот сборник слухов в и предположений. Если Вы сотрудник компании, то пишите нам на почту - будем общаться, всё покажем, всё расскажем.
> Если Вы сотрудник компании, то пишите нам на почту - будем общаться, всё покажем, всё расскажем.То есть одно из главных утверждений — что вы продаёте только компаниям — верно? А если фрилансеру-одиночке нужна лицензия на всего 1 место, пускай ищет с кем скооперироваться и купить вскладчину?
И не могли бы вы оценить стоимость разработки и поддержки линукс-версии? Либо оцените, сколько нужно продать лицензий, чтобы её окупить?
> То есть одно из главных утверждений — что вы продаёте только компаниям — верно?Да. Причина - индивидуальным разработчикам не нужен статический анализатор. Или по крайней мере такой, за который следует платить. Ну не нужен он им. Причина сразу несколько, попробую назвать некоторые.
* Они работают с маленькими проектами где ниже плотность ошибок. http://www.viva64.com/ru/b/0158/ Поэтому контроль качества кода ещё не стоит для них так остро.
* В маленьких проектах если начинаются проблемы с качеством, намного проще выправить ситуацию. Достаточно остановиться заняться обзорами кода, рефакторингом. Т.е. можно что-то сделать в отличии от большого проекта.
* Маленький проект как правило молод и все люди которые его разрабатывали рядом. Когда проекту 10 лет, его намного сложнее, скажем портировать на 64-битную систему. Ибо никто из команды уже не знает какие темные места скрыты в коде. Анализатор приходит на помощь.
* В больших проектах траты на приобретение статического анализатора совершенно незначительны и незаметны по сравнению с прочими затратами. Для индивидуальных же разработчиков это ощутимо.
* В конце концов, то что он им не ужен подтверждается практическими наблюдениями. Вот наши эксперименты в этом направлении: http://www.viva64.com/ru/b/0320/
> А если фрилансеру-одиночке нужна лицензия на всего 1 место,
> пускай ищет с кем скооперироваться и купить вскладчину?Не нужно для них такое решение. Проще, дешевле, удобнее взять один из бесплатных статических анализаторов кода: Cppcheck, Clang. В gcc тоже хороший набор предупреждений.
> И не могли бы вы оценить стоимость разработки и поддержки линукс-версии? Либо
> оцените, сколько нужно продать лицензий, чтобы её окупить?Не понятно, что разрабатывать. Ядро собирается под разные системы. Дело в другом. У каждого "свой unix". Свой компилятор, своя система сборки, своя среда разработки. И в каждом случае нужен индивидуальный подход. Невозможно (сложно) сделать коробочные варианты продукта для всех сочетаний. И вот тут уже начинается индивидуальное общение. Если есть интерес - пишите от лица компании, будем обсуждать.
> PVS-Studio проприетарщина, так ещё и только под Windows да ещё и
> только под микрософтовский компилятор.Я бы сказал по-другому. Наш клиент — это человек, обычно работающий в среде Windows в среде Visual C++. Именно поэтому мы ориентируемся на него в разработке, в статьях, везде. Но на самом деле PVS-Studio не плохо умеем gcc, (в Win mingw), clang. Хотя конечно поддерживаем их не так полноценно, как Visual C++.
> Я бы сказал по-другому. Наш клиент — это человек, обычно работающий в
> среде Windows в среде Visual C++.При этом не понятно что вы забыли на опеннете, спамеры. Тут процент таких людей пониженный, зато процент тех кто вас за это крепко не любит - выше среднего.
> А ребята нормальные, только бы и впрямь ещё под линукс спортировались, что ли...Эти нормальные ребята к опенсорцу отношения не имеют. Статических анализаторов сейчас много, coverity сканирует открытые проекты на регулярной основе.
Продажа услуг по проверке сорцов - более-менее понятна. А продажа каких-то блобов для студии - вообще о чем? И почему на опеннет?
> указание оператора '=' вместо '==' в сравненииВсегда стараюсь писать if(CONSTANT == variable). Но мне говорят: ты чо, сейчас же 21 век, никто уже не делает ошибок '='/'==', это не модно. А по-моему, это должно впитываться на уровне рефлексов у сишников, как ++i (вместо i++) у плюсплюсников.
> как ++i (вместо i++) у плюсплюсников.Интересно было бы посмотреть на компилятор, который бы это не поправил, и на код, в котором это было бы критично
Это сторонники i++ должны доказывать правильность своей позиции. А то дойдем и до того, что const не нужно. ++i-оператор проще, с минимальной семантикой, поэтому его использование должно быть очевидно, i++ же - оператор с более сложной семантикой, его использование следует обосновать.Может еще и for(;;) vs. while(true) вызывает у вас вопрос? :)
> Может еще и for(;;) vs. while(true) вызывает у вас вопрос? :)к черту бизнесс-логику! даешь микрооптимизации
const - промашка языка. Но, на сколько я знаю, в gcc можно переключит на mutable
> Это сторонники i++ должны доказывать правильность своей позицииНикто никому ничего не должен
> Это сторонники i++ должны доказывать правильность своей позиции. А то дойдем и
> до того, что const не нужно. ++i-оператор проще, с минимальной семантикой,
> поэтому его использование должно быть очевидно, i++ же - оператор с
> более сложной семантикой, его использование следует обосновать.
> Может еще и for(;;) vs. while(true) вызывает у вас вопрос? :)Ты ИДИОТ.
> код, в котором это было бы критичноНа интах уже много лет пофиг. А вот для всяких итераторов все еще важно. Проблема в том, что постфиксный инкремент должен запомнить "старое" значение и вернуть его после инкремента. А вот префиксный может вернуть ссылку на себя сразу после модификации.
Собственно создание временного объекта для "старых" значений в постфиксном инкременте все еще не каждый компилятор оптимизирует (даже если итератор на самом деле превращается в указатель и все функции inline).
> ... все еще не каждый компилятор оптимизирует (даже если итератор на самом деле превращается в указатель и все функции inline).Это всё равно не имеет значения, даже без оптимизации такая операция довольно дешёвая. Проблемы создают только совсем нетривиальные итераторы.
> Это всё равно не имеет значения, даже без оптимизации такая операция довольно
> дешёвая. Проблемы создают только совсем нетривиальные итераторы.Смысл писать ++i есть. Моя статья на эту тему.
Есть ли практический смысл использовать для итераторов префиксный оператор инкремента ++it, вместо постфиксного it++: http://www.viva64.com/ru/b/0093/
И другая статья, написанная по мотивам моей:
Pre vs. post increment operator – benchmark. http://silviuardelean.ro/2011/04/20/pre-vs-post-increment-op.../
И конечно же компилируете свое ... с выключенными варнингами ?
Конечно нет, не переводите тему. Варнинги так же должны рефлекторно восприниматься как потенциальные ошибки. Желательно Werror. А вот статический анализатор еще не использовал, кстати.Виндовозы грешат отключением варнингов, чаще всего. Во-первых, там в стандартной библиотеке и windows-хедерах варнингов опой жуй при сборке студией. А во-вторых, проще, естественно, мышкой в свойствах проекта выбрать низкий уровень варнингов, а не осознавать, что за сообщения и как их исправить\подавить по уму
Это вполне легитимная и используемая операция (т.е. присваивание в if(...) ), никакого предупреждения не будет.
да, предупреждение на самом деле есть, предлагает в скобки завернуть. Ну тогда вообще пробелмы нет.
да, и присаоение в if'е - не от большого ума.
> Всегда стараюсь писать if(CONSTANT == variable). Но мне говорят: ты чо, сейчас
> же 21 век, никто уже не делает ошибок '='/'==', это не модно.Дарю идею:
#define IF (constant, var) ... и потом в коде IF (constant, var).
Всегда спотыкаюсь, когда читаю такой код. Привыкнуть конечно можно, но считаю, что машина должна подстраиваться под человека, а не наоборот. Компиляторы давно предупреждают о присвоении в условии, поэтому нет смысла извращаться.
Наверное еще на int const n; вместо const int n; спотыкаешься? А ведь это best practice для С и плюсов, повышает внимание к деталям при чтении кодаПодстройка машины под человека - это не про С, не тот уровень
> как ++i (вместо i++) у плюсплюсников.чо, серьезно?
Саттер об этом пишет в "Сложных задачах". Вот тут: http://herbsutter.com/2013/05/13/gotw-2-solution-temporary-o.../ в разделе "The iterator increment uses postincrement".Если в кратце, постинкремент требует сохранения временного значения (так как возвращает значение до инкремента), а преинкремент - нет.
А ничего то, что его величество компилятор это дело крутит как хочет?
Причем разные по разному...
А если надо сравнить две переменные?
> Всегда стараюсь писать if(CONSTANT == variable). Но мне говорят: ты чо, сейчас
> же 21 век, никто уже не делает ошибок '='/'==', это не модно.Код должен быть в первую очередь понятным, а уже потом всё остальное, поэтому только variable == CONSTANT. В случае с = все современные компиляторы напишут варнинг и попросят заменять = на == или поставить дополнительные скобки. И никто кроме компилятора не спасёт вас в случае variable1 == variable2.
> А по-моему, это должно впитываться на уровне рефлексов у сишников, как ++i (вместо i++) у плюсплюсников.
Нет, это ровно такой же бред.
Да они задрали спамить, когда уже загнутся?
задрал спамить, загнись.
Раньше они по крайней мере открывали баги, а с Gtk+ не пожелали. Странно.
> Раньше они по крайней мере открывали баги, а с Gtk+ не пожелали. Странно.Что "странно"? Просто не поместилось нигде.
Отчёт на листе формата А4? С чего бы это не поместилось?
> Раньше они по крайней мере открывали баги, а с Gtk+ не пожелали.При проверке open source проектов мы всегда сообщаем разработчикам. Если мы публикуем статью о проверке этого проекта, то ссылку стараемся отправить авторам проекта. Если мы проверили проект, но ошибок на отдельную статью не набралось, то мы все-равно отправляем авторам то, что есть.
При этом мы никогда не отправляем патчи и не открываем отдельные баги. Причин этому сразу несколько:
* Мы не знакомы с кодом и не знаем, реальную ли ошибку мы в нем нашли или все-таки нет. Для понимания этого нужно очень глубокое погружение в проект.
* Это очень много работы. Сейчас в базе уже около 10000 ошибок http://www.viva64.com/ru/examples/ . Представляете какой это объем работ?
* Наконец цель написания наших статей – показать возможность анализатора кода, который мы разрабатываем. То есть показать, что наш инструмент реально находит ошибки в настоящем, живом коде. Нам надо показать только лишь, что инструмент их находит.
То-есть фирмочка всучит бинарный плагин, а дальше #%$тесь как хотите, дорогие клиенты, сами разбирая 10 000 ошибок.Тем временем, есть уже несколько онлайн сервисов, которые помогают заниматься вопросами качества, интеграции и отлова ошибок. В случае открытых проектов они из git проекта таскают коммиты и присылают отчеты, близко к реальному времени. Поэтому у них работа строится в виде накосячил - получи репорт через полчаса. А не так что вот тебе 10 000 ошибок раз в 10 лет и бодайся как умеешь. А потом эти люди с вьюжлстудией удивляются почему их считают за каких-то динозавров, с такими то практичными технологиями.
> сами разбирая 10 000 ошибокПродают анализатор, но не услуги по исправлению найденных им ошибок. Ты чего ожидал, что он сам исправлять ошибки будет? А может и код писать? А на кой хрен ты тогда нужен?
> — Во-первых, пирожного! Во-вторых… Вы, чего, и пальцы за меня загибать будете?
> — Ага!
> — Во-вторых, конфет! В-третьих… ну, загибайте, загибайте! А в-третьих, мороженого…
> (позже)
> — Вы, чего, и конфеты за меня есть будете?
> — Ага!
> Если мы публикуем статью о проверке этого проекта, то ссылку стараемся отправить авторам проекта.Просто в конце статьи вы не упомянули, что сделаете это. И какому именно автору/ам вы отправите. Ведь проект имеет публичную почтовую рассылку.
Да, действительно, 20 марта исправления были внесены в Gtk+. Не уточнял ещё все ли, но те, что видел вошли в релиз Gtk+ 3.20.
> При этом мы никогда не отправляем патчи и не открываем отдельные баги
В GNOME можно даже патчи слать, они и их успешно игнорируют. Удивлён, что в этот раз хватило просто ссылки на статью. Впечатлились, наверное, постыдились и не стали откладывать на год-другой-третий.
Кстати, а пробовали уже coreboot обследовать? Должно быть крепкий орешек, т.к. low level C. А FreeRTOS, contiki-os?
>приведение знакового типа к беззнаковому, указание оператора '=' вместо '==' в сравнении, использование одной переменной для внешнего и вложенного цикловОх…еть! Это, типа, «опечатки и мелкие недочеты»?! Тогда и «rm -rf / usr/lib/mylib» это просто «мелкий недочёт».
> указание оператора '=' вместо '==' в сравнении
> приведение знакового типа к беззнаковомуА компиляторы разве не ругаются на такое?
for(int i = 0; i < child.size(); ++i) {
if(value = child[i].value) {
useValue(&value);
}
}В этом коде - то самое приведение (которое никак не приведет к проблемам, если child - это, например, дочерние элементы формы, и их никак не может быть больше сотни).
А также используется = в if, только не "вместо", а именно так, как задумано - и компилятор, естественно, спокойно это воспринимает. Впрочем, отличить опечатки такого рода от задуманного присвоения компилятор, увы, не в состоянии.
> Впрочем, отличить опечатки такого рода от задуманного присвоения компилятор, увы, не в состоянии.if((value = child[i].value))
И никакого предупреждения от компилятора не будет.
Давненько на C писал, но -Wall -Wextra должно помочь
Верно, компилятор предупреждает пока не найдет доп. скобки.
Ну, уж если стараться над кодом, то стоит явно прописать сравнение с нулем, чтобы не только компилятору все было ясно с первого взгляда.
Речь не о хороших привычках, стиле и прочем, а о том, что сама семантика языка вполне допускает то, на что компилятор и статический анализатор делают стойку.
И польза от переписывания всех подобных мест в проекте масштаба GTK+ неочевидна - во-первых, это куча человекочасов специалиста, во-вторых, легко можно наделать новых ошибок при таких исправлениях. Или обнаружить, что одна ошибка компенсировалась другой, а теперь это сломано, и надо лезть глубже.
if(int value = child[i].value) уже явно не очепятка, но это уже кресты.
> if(int value = child[i].value) уже явно не очепятка, но это уже кресты.Кресты. Крассные. Т.е. - клиника.
Вот бы PVS-Studio могла бы найти такой баг, как в path_name() в git. http://www.opennet.me/opennews/art.shtml?num=44068
Называется american fuzzy lop
> Называется american fuzzy lopОтличный тул, опенсорсный и в отличие от плагина для студии работает под Linux. Но все-таки он заходит к проблеме с другого бока, это не статический анализ а осмысленная "атака". Есть еще asan/ubsan/tsan - эти для чуть иных ситуаций, но в пару к afl их взять самое то.
>...использование одной переменной для внешнего и вложенного циклов,...это должен отлавливать компилятор
>>...использование одной переменной для внешнего и вложенного циклов,...
> это должен отлавливать компиляторНичего он никому не должен. И подтверждение этому ошибки, которые мы нашли во многих проектах: http://www.viva64.com/ru/examples/V535/
Толку от этого маловато - в C/C++ с этой задачей хорошо справляется компилятор. Такие утилиты нужны в безумно-типизированных, плохо-спроектированных языках, типа JavaScript.А для отлова серьёзных ошибок у проекта должны быть хорошо документированные требования и грамотно написаннные функциональные тесты.
> Толку от этого маловато - в C/C++ с этой задачей хорошо справляется
> компилятор. Такие утилиты нужны в безумно-типизированных, плохо-спроектированных языках,
> типа JavaScript.Не совсем понятно, про что речь. Но если о том, что для С/С++ статический анализатор не нужен, то это очень далеко от истины. Как раз вот здесь то он очень даже нужен.
Proof: http://www.viva64.com/ru/a/0084/