Комментарии 110
Там в коде не найдена строчка «Русские не сдаются»?
+11
НЛО прилетело и опубликовало эту надпись здесь
сомневаюсь, что тут именно копипаст, больше похоже на опечатку
+12
Копипастить простые циклы это конечно ок идея…
Хотя с другой стороны вижу что ограничитель (w.GetNumPoints()) не вынесен в переменную дабы не вызывался метод каждую итерацию, так что всё может быть :)
Хотя с другой стороны вижу что ограничитель (w.GetNumPoints()) не вынесен в переменную дабы не вызывался метод каждую итерацию, так что всё может быть :)
-1
вы также не видите, меняется это значение внутри цикла или нет. Все может быть :)
0
Скорей всего метод заинлайнен и нет смысла выводить в отдельную переменную.
0
Отладка кода делиться на две фазы:
Первая: Почему оно не работает.
Вторая: Как оно вообще может работать. (o_0)
Первая: Почему оно не работает.
Вторая: Как оно вообще может работать. (o_0)
0
Жду исправленный Doom3 с блекджеком :)
+6
Интересно, что они не исправили недочеты, хотя пользуются PVS-Studio.
+9
Как я написал в статье, скорее всего это связано с тем, что часть кода не используется.
0
Кто сказал что они пользуются PVS-Studio? Они может просто купили лицензию, поиграли и забросили. Или используют в других своих проектах.
+5
Возможно. Не знаю.
+1
Пару раз в твиттере Кармака видел комменты по поводу PVS-Studio
+4
А с каких пор вы «Intel’s PVS-Studio»? о_О
0
Это он поначалу не разобрался. Видимо, читал нашу статью на сайте Intel. Вот и решил, что это их.
Кстати именно из-за таких вещей и нельзя писать статьи без рекламы конкретного продукта. Поясню мысль: www.rsdn.ru/forum/cpp.applied/4474127.1.aspx
Кстати именно из-за таких вещей и нельзя писать статьи без рекламы конкретного продукта. Поясню мысль: www.rsdn.ru/forum/cpp.applied/4474127.1.aspx
0
Я вообще к ним отношения не имею, просто подписан на твиттер Кармака
0
Так Дум3 вышел ещё когда PVS-Studio ещё в помине не было вроде как.
-2
Пулл реквест то послали?
+2
А зачем?
-20
Меня вопрос аж в тупик поставил. Как это зачем?
Нашли ошибки в коде, который, скорее всего, будет очень востребован в ближайшем будущем. Кто-то возможно потратит кучу времени и сил, когда с ними столкнется. А вам вот прямо сейчас ничего не стоит их исправить. Да просто ради уменьшения энтропии вселенной хотя бы.
Нашли ошибки в коде, который, скорее всего, будет очень востребован в ближайшем будущем. Кто-то возможно потратит кучу времени и сил, когда с ними столкнется. А вам вот прямо сейчас ничего не стоит их исправить. Да просто ради уменьшения энтропии вселенной хотя бы.
+24
А почему, тем кто «возможно потратит кучу времени» должен быть я? :) Вот давайте я дам вам ключ от PVS-Studio и Вы поможете миру стать лучше. Жду Вас в почте за ключиком: karpov[@]viva64.com. Если Вы мне не напишите и не начнете этим заниматься, то Ваши слова ничего не стоят и не значат.
-18
Мне не нужен ключ, я на С++ вообще не пишу. А вы уже потратили это время и уже нашли ошибки. И вам вот именно сейчас ничего не стоит сделать мир лучше просто нажав кнопку на гитхабе. Этим самым вы сэкономите миллион человекочасов многим людям и сделаете их жизнь лучше.
Хотя, действительно, а зчем? Похуй, пускай так будет.
Хотя, действительно, а зчем? Похуй, пускай так будет.
+39
Вот о чём я и говорю. Просто проходили мимо и решили поучить окружающих жизни.
Я всегда отписываю про найденные ошибки разработчиков. Но мне уже надоели доброхоты, рассказывающие как мне надо поступать. Я специально теперь предлагаю им самим сделать добро. И они всегда отказываются. То он Visual Studio не использует… То на Си++ не программирует… И Вы в том числе. Очень забавно наблюдать.
Я всегда отписываю про найденные ошибки разработчиков. Но мне уже надоели доброхоты, рассказывающие как мне надо поступать. Я специально теперь предлагаю им самим сделать добро. И они всегда отказываются. То он Visual Studio не использует… То на Си++ не программирует… И Вы в том числе. Очень забавно наблюдать.
+11
Ебанные уши, я вообще веб-программист и пишу на руби. Visual Studio я в жизни не запускал ни разу и слабо себе представляю, что это вообще такое. Виндой тоже не пользуюсь лет этак 6. И да, я отправил много пулл-реквестов во всякие разные опен-сорц библиотеки с исправлениями. Какая это вообще имеет значение?
Мы сейчас разговариваем о конкретной ситуации, когда нашли ошибки, но пулл-реквест отправить — «а зачем?». Что-то это фигово вяжется с фразой про «всегда отписываю про найденные ошибки разработчикам».
Мы сейчас разговариваем о конкретной ситуации, когда нашли ошибки, но пулл-реквест отправить — «а зачем?». Что-то это фигово вяжется с фразой про «всегда отписываю про найденные ошибки разработчикам».
+62
Ну правильно. Давайте минусовать меня злодея, и плюсовать праведников. :) Жду в почте голосующих идеалистов. Кто займётся исправлением ошибок в Doom — тому дам ключ. Посмотрим, сколько будет желающих.
-2
Основная мысль в том, что вы уже нашли и исправили (хотя бы «на словах») несколько багов.
И вас отделяет от полезного вклада только один короткий шаг — сделать пул-реквест.
И вас отделяет от полезного вклада только один короткий шаг — сделать пул-реквест.
+16
пулл реквест кому?
github.com/TTimo/doom3.gpl/issues/1
Q> How do you manage pull requests in this repository? Will you merge any quality branches into the codebase?
A> I don't expect to be merging much things at all. Things like supporting XCode 4 and newer OSX maybe, or simple bug fixes. Some of the forked repositories might turn out to be pretty active, I expect the ioquake3 folks (#ioquake3 on freenode) will be pretty active for a while.
github.com/TTimo/doom3.gpl/issues/1
Q> How do you manage pull requests in this repository? Will you merge any quality branches into the codebase?
A> I don't expect to be merging much things at all. Things like supporting XCode 4 and newer OSX maybe, or simple bug fixes. Some of the forked repositories might turn out to be pretty active, I expect the ioquake3 folks (#ioquake3 on freenode) will be pretty active for a while.
+5
TTimo предлагал www.iodoom3.org/ сюда отправлять пулл реквесты.
+4
Кошмар! В репозиториях творится полнейший ад. Каждый наровит конвертнуть исходники в свой любимы code style! Проекту нужен лидер.
+1
or simple bug fixes
0
Ну да, тут ошибка есть, а в другом месте она закостылена, и после исправления тут «сломается ВСЁ» нельзя просто взять и что то исправить в коде без проверки ;)
Я конечно утрирую, но с разбегу ковырять абсолютно незнакомый проект, а уж тем более искать ошибки сам тоже не стану, да и никому не советую, поскольку есть шанс сделать ещё хуже.
Я конечно утрирую, но с разбегу ковырять абсолютно незнакомый проект, а уж тем более искать ошибки сам тоже не стану, да и никому не советую, поскольку есть шанс сделать ещё хуже.
+3
При наличии данной статьи, исправление ошибок будет невероятно сложным :)
+4
Это большая работа. Вы не учитываете, что здесь перечислены далеко не все подозрительные места.
+2
А зачем править _все_ места?
Никто не требует от вас полноценного code-review и исправления всех багов, просто правка тех мест, которые вы заметили и описали в статье.
Никто не требует от вас полноценного code-review и исправления всех багов, просто правка тех мест, которые вы заметили и описали в статье.
+1
Мне кажется, вам просто надо дополнить ваш анализатор функцией исправления ошибок и отправки патчей разработчикам, и проблема решится сама собой!
+4
Раз такое дело — давайте!
Готов прошерстить ошибки, выявленные PVS-Studio в коде Doom III.
Обещаю до Нового года отчитаться о сделанной работе (если, конечно, там не тысячи предупреждений).
Посылаю на почту это же сообщение.
Готов прошерстить ошибки, выявленные PVS-Studio в коде Doom III.
Обещаю до Нового года отчитаться о сделанной работе (если, конечно, там не тысячи предупреждений).
Посылаю на почту это же сообщение.
+6
Хорошо. Вот уже сегодня нескольким человекам выдали ключ — кому для Doom, кому для своих собственных проектов.
P.S. Кто будет работать с Doom, просьба смотреть, прежде чем править. А то уже были случаи. Когда два добровольцы приходят в открытый проект и первый правит код, меняя аргументы:
memset( X, sizeof( X ), 0 );
заменяет на:
memset( X, 0, sizeof( X ) );
А второй, не глядя, тоже делает доброе дело и вновь меняет аргументы:
memset( X, 0, sizeof( X ) );
заменяет на:
memset( X, sizeof( X ), 0 );
Использование подсказок от статического анализатора не отменяет необходимость думать и разбираться в коде. :)
P.S. Кто будет работать с Doom, просьба смотреть, прежде чем править. А то уже были случаи. Когда два добровольцы приходят в открытый проект и первый правит код, меняя аргументы:
memset( X, sizeof( X ), 0 );
заменяет на:
memset( X, 0, sizeof( X ) );
А второй, не глядя, тоже делает доброе дело и вновь меняет аргументы:
memset( X, 0, sizeof( X ) );
заменяет на:
memset( X, sizeof( X ), 0 );
Использование подсказок от статического анализатора не отменяет необходимость думать и разбираться в коде. :)
+8
еще cppcheck прогони, чисто посмотреть на разницу. он бесплатен.
+2
Описал на почту. Чем просто ковырять исходники, лучше сразу полезным делом заниматься.
0
Я вообще PVS-Studio не люблю, но в данном случае автора понимаю. Вы предлагаете ему сделать бесплатно на благо общества некий кусок работы (оформить пул-реквест, перевести данный топик, написать письмо). Это вполне себе время (а значит — деньги). С таким же успехом можно делать заявления типа «Ну ты же врач, умеешь лечить людей — пойди после основной работы волонтёром бездомных бесплатно полечи пару часов! Не хочешь? Ну ты козел!».
Почему Вы вообще требуете от человека выполнения какой-то работы бесплатно, просто на том основании, что он может и умеет её делать?
Почему Вы вообще требуете от человека выполнения какой-то работы бесплатно, просто на том основании, что он может и умеет её делать?
+40
Да никто ничего не требует, в самом деле. Ну если лениво, то и ладно. Мне искренне не понятна позиция «а зачем?».
Это как сделать скворечник, а потом выкинуть его в помойку.
Это как сделать скворечник, а потом выкинуть его в помойку.
0
Это скорее как достать досок, гвоздей и молоток. Прогнать код через статический анализатор — я не думаю что это занимает много времени. А вот оформить все это как баг репорт и сделать все необходимые действия чтобы он попал куда нужно — на это нужно время.
+8
Да. Самое сложное — трудно понять, ошибка это или так хитро задумано. В некоторых случаях на это уходит очень много времени, кто не знаком с проектом.
+1
Да, это серьезная и трудоёмкая работа. И вот вы ее проделали, получили плюсиков на хабре. Самое время теперь получить за ту же самую работу плюсиков на гитхабе!!1
-1
Ды..., не проделал я эту работу! Работа у меня другая. Она более для меня полезна. И думаю для окружающих в конечном итоге тоже. Это разработка статического анализатора и популяризация этой технологии. Я только пробежался по верхам и выписал те места, где ошибки более очевидны. Разбираться с каждым отдельным сообщением у меня нет сил и времени.
И не надо делать из меня злодея. Нас мало, а проектов в мире много. Вкладывать свое время в чужие проекты не имеет смысла. Это хорошо быть героем и внимательно поработав с 1-2 Open-Source проектами, исправить в них ошибки. А мы проверяем проекты десятками. Если мы начнем их внимательно смотреть и править чужие ошибки, то вся работа остановится.
И не надо делать из меня злодея. Нас мало, а проектов в мире много. Вкладывать свое время в чужие проекты не имеет смысла. Это хорошо быть героем и внимательно поработав с 1-2 Open-Source проектами, исправить в них ошибки. А мы проверяем проекты десятками. Если мы начнем их внимательно смотреть и править чужие ошибки, то вся работа остановится.
+15
автор не просто потратил время на разбирание исходников, это реклама pvs-studio и я так понимаю она окупится; так что можно не волноваться за напрасно проведенную автором работу.
+4
>>Какая это вообще имеет значение?
Такое, что если вы за энтропию, экономию человекочасов и прочее построение коммунизма — возьмите и сделайте. Сами. А не рассказывайте кому и что нужно срочно сделать.
Такое, что если вы за энтропию, экономию человекочасов и прочее построение коммунизма — возьмите и сделайте. Сами. А не рассказывайте кому и что нужно срочно сделать.
+7
Я не умею и мне жалко времени. А он умеет и это время уже потратил и все сделал. Теперь он результаты своей полезной работы берет и спускает в унитаз. Видимо, чтобы врагу не достались.
-12
А рассказывать окружающим как жить — не жалко времени?
+11
прокрастинация — наше все.
-10
Вы пишите что мне жалко времени, но через коммент пишите прокрастинация — наше все.
Вы уж выберите что-то одно.
Вы уж выберите что-то одно.
+4
За уменьшение энропии, вы хотели сказать?
0
ну вот и иди в жопу со своими учениями других
+5
ты не понял. цель поста — попиарить pvs studio, а не что либо поправить. Поэтому и отправлять никто ничего не будет, очевидно же. В прошлый раз правда за такой отклик мне влупили полгода r/o, так что считай реклама проплачена.
+8
Кто-нибудь может посоветовать такой же, но только с пурпуровыми пуговицами для java?
+1
Ну… Тяжело сравнивать, так как на С++ писал очень давно, а PVS вообще никогда не использовал, но свой код прогоняю через FindBug. Есть еще PMD check.
-2
например, в IntelliJ IDEA (даже в бесплатной community edition) есть богатый набор разнообразнейших инспекций для статического анализа кода
www.jetbrains.com/idea/
www.jetbrains.com/idea/
+1
В Java очень большое число подобных грабель просто не может возникнуть.
Хотя, конечно, там есть и свои.
Хотя, конечно, там есть и свои.
0
Несомненно откопипастить 2 одинаковы строки и забыть поменять или ошибиться инкрементом в for-е невозможно, это все полохой с++.
+3
Не знаю, как там в Java (не пишу на ней), но в современных языках давно уже:
* В Python цикл for итерирует без счётчика — меньше писанины, копировать смысла нет.
* В D есть foreach, можно дописывать его поддержку в свои стурктуры/классы.
* В Racket вообще всего навалом — for, for-each, for/list, for/vector… Да ещё макросы, характерные для Lisp. Копипаста корчится в предсмертных судорогах.
И вот в 2011 году (!) наконец-то и в C++, в одном из самых популярных языков мира с туевой хучей написанного на нём софта, появилась поддержка циклов а-ля foreach. Нет, конечно, C++ тут совершенно не причём. И то, что стандарты принимаются по 10 лет, тоже мелочь. Обратная совместимость — вообще смешно.
Да C++ стимулирует копипасту всеми своими тентаклями и только недавно начал приходить в норму. Пока ещё компиляторы под него допилят, а для C++ это pain in the ass. Используют C++ просто из-за скорости кода (когда это критично) и ООПэшности, ну и по привычке.
И я это говорю не как нуб, я на C++ чего только не писал — парсеры и компиляторы, игры и всякие утилиты, разобрался во всех хитросплетениях кода Андрея Александреску и Джеффа Элджера. Но даже Андрей таки не выдержал, и забросил пляски вокруг шаблонов, свалив допиливать стандартную библиотеку D.
* В Python цикл for итерирует без счётчика — меньше писанины, копировать смысла нет.
* В D есть foreach, можно дописывать его поддержку в свои стурктуры/классы.
* В Racket вообще всего навалом — for, for-each, for/list, for/vector… Да ещё макросы, характерные для Lisp. Копипаста корчится в предсмертных судорогах.
И вот в 2011 году (!) наконец-то и в C++, в одном из самых популярных языков мира с туевой хучей написанного на нём софта, появилась поддержка циклов а-ля foreach. Нет, конечно, C++ тут совершенно не причём. И то, что стандарты принимаются по 10 лет, тоже мелочь. Обратная совместимость — вообще смешно.
Да C++ стимулирует копипасту всеми своими тентаклями и только недавно начал приходить в норму. Пока ещё компиляторы под него допилят, а для C++ это pain in the ass. Используют C++ просто из-за скорости кода (когда это критично) и ООПэшности, ну и по привычке.
И я это говорю не как нуб, я на C++ чего только не писал — парсеры и компиляторы, игры и всякие утилиты, разобрался во всех хитросплетениях кода Андрея Александреску и Джеффа Элджера. Но даже Андрей таки не выдержал, и забросил пляски вокруг шаблонов, свалив допиливать стандартную библиотеку D.
+3
помимо Idea можно посмотреть checkstyle и findbugs
+1
Не думаю, что когда-либо буду использовать сей чудесный продукт, но чувство, что прикоснулся к прекрасному — не покидает.
+5
Всех с пятницей. Ваш К.О
-21
PVS-studio опубликовали под опенсорсом и вы решили написать об этом в блоке «Опен Сорс»?
+40
В PVS-Studio версии 4.50, которая выйдет в этом году, можно будет в качестве препроцессора использовать Clang, а не препроцессор от Visual C++Так что, таки в скором времени появится версия для Linux/Mac?
+3
Нет. Но это шаг…
0
Ну алеллуйя))) Так можно перепилить его в качестве плагина для llvm+clang и все счастливы будут)
+1
Да. Вот она: PVS-Studio для Linux (всего 5 лет и надо было подождать :).
0
Было бы хорошо, если бы вы прогнали через PVS-студию проект с большим количеством шаблонов и классов. А также показали как ваш продукт можно заинтегрировать в сторонюю систему сборки, которая использует компилятор Microsoft Visual C++.
0
>> Было бы хорошо, если бы вы прогнали через PVS-студию проект с большим количеством шаблонов и классов.
Называйте проект. Должен иметь солюшен для VS.
>> А также показали как ваш продукт можно заинтегрировать в сторонюю систему сборки, которая использует компилятор Microsoft Visual C++.
www.viva64.com/ru/d/0007/
Называйте проект. Должен иметь солюшен для VS.
>> А также показали как ваш продукт можно заинтегрировать в сторонюю систему сборки, которая использует компилятор Microsoft Visual C++.
www.viva64.com/ru/d/0007/
0
> Называйте проект. Должен иметь солюшен для VS.
Google Chromiium :)
Google Chromiium :)
0
Хромиум уже был, www.viva64.com/ru/a/0074/
+1
эм, Boost? :) или уже было?
+1
aalib + bb
0
например, в IntelliJ IDEA (даже в бесплатной community edition) есть богатый набор разнообразнейших инспекций для статического анализа кода
www.jetbrains.com/idea/
www.jetbrains.com/idea/
+2
Чёрт. Я тогда вообще не понимаю, как этот Doom тогда в состоянии работать. Или это всё в мёртвых неработающих ветках?
А ведь там, насколько помнится, часть кода написана ещё и на некоем внутреннем скриптовом языке. Его так вообще не проверить, из-за динамики.
А ведь там, насколько помнится, часть кода написана ещё и на некоем внутреннем скриптовом языке. Его так вообще не проверить, из-за динамики.
0
Здесь скорее дело в везении. В большинстве, это мины, которые просто спят и ждут своего часа. Они проявят себя при смене компилятора/настроек. Или после рефакторинга. Меняем в одном месте — глючит в другом (компилятор что-то начал иначе оптимизировать).
Фрагмент 4. Пока компилятор вначале увеличивает dir_cache_index всё хорошо.
Фрагмент 5-7. Если в недоочищенной памяти содержатся нули, то и всё хорошо (пока).
И так далее.
Фрагмент 4. Пока компилятор вначале увеличивает dir_cache_index всё хорошо.
Фрагмент 5-7. Если в недоочищенной памяти содержатся нули, то и всё хорошо (пока).
И так далее.
+2
Зачем в статье линкеры сайта PVS студии?
+2
В смысле, www.viva64.com/go.php?url=757 вместо github.com/TTimo/doom3.gpl
+5
Фрагмент 3, скорее всего, какой-то хитрый код нежели баг.
0
Несколько вопросов:
1. PVS не планирует реализовать поиск неиспользуемого кода?
2. Как насчет рекомендаций по оптимизации кода? (или рефакторинг под определенную версию языка, например С++11)
3. Как идет работа по ускорению PVS, может представить критические участки кода в виде задач для програмистов и выложить на Хабре — решивший наиболее оптимально получает версию PVS.
1. PVS не планирует реализовать поиск неиспользуемого кода?
2. Как насчет рекомендаций по оптимизации кода? (или рефакторинг под определенную версию языка, например С++11)
3. Как идет работа по ускорению PVS, может представить критические участки кода в виде задач для програмистов и выложить на Хабре — решивший наиболее оптимально получает версию PVS.
0
1. Неиспользуемый код хорошо находится компиляторам. По крайней мере, в Visual C++. Реализовывать функциональность, которая есть в Visual C++, мы сейчас поводов не видим.
2. У нас есть задел в этом направлении (диагностики V801-V806). Но развивается он медленно. Интересней находить ошибки, чем места для микрооптимизаций. С рекомендациями по поводу рефакторинга не понятно. Прошу привести примеры.
3. В коде нет каких то особенно узких мест. Мы время от времени посматриваем профайлером. Последним по настоящим узким местом было использование vector и string. Вернее то, что они не очень удачно работали с памятью. Мы имеем некоторую высокоуровневую информацию, которая позволяет создавать и уничтожать массивы/строки более экономно. Теперь в ряде критических мест используются свои строи и массивы.
В основном сейчас скорость упирается во внешний препроцессор. Visual C++ при препроцессировании работает дольше, чем потом PVS-Studio анализирует полученный i-файл. Поэтому сейчас оптимизировать что-то в PVS-Studio глупо, раз больше половины времени работает не он, а cl.exe. Вот когда перейдем на Clang, тогда можно будет смотреть внимательнее. Сейчас это не то место. :)
2. У нас есть задел в этом направлении (диагностики V801-V806). Но развивается он медленно. Интересней находить ошибки, чем места для микрооптимизаций. С рекомендациями по поводу рефакторинга не понятно. Прошу привести примеры.
3. В коде нет каких то особенно узких мест. Мы время от времени посматриваем профайлером. Последним по настоящим узким местом было использование vector и string. Вернее то, что они не очень удачно работали с памятью. Мы имеем некоторую высокоуровневую информацию, которая позволяет создавать и уничтожать массивы/строки более экономно. Теперь в ряде критических мест используются свои строи и массивы.
В основном сейчас скорость упирается во внешний препроцессор. Visual C++ при препроцессировании работает дольше, чем потом PVS-Studio анализирует полученный i-файл. Поэтому сейчас оптимизировать что-то в PVS-Studio глупо, раз больше половины времени работает не он, а cl.exe. Вот когда перейдем на Clang, тогда можно будет смотреть внимательнее. Сейчас это не то место. :)
+1
2. делегирование конструкторов и универсальная инициализация, auto, nullptr, smart pointers, wrapper references — это наверное основное. А вообще интересен хотя бы полуавтоматический перевод старых проектов на C++11, тут как раз без проверки ошибок не обойтись.
0
Кстати, многие из этих ошибок мне нашёл сам Clang с опциями -Wall -pedantic
+17
Вот это я называю грамотной рекламой. И продукт описали, и читать интересно.
+3
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
PVS-Studio: анализируем код Doom 3