Как стать автором
Обновить

Комментарии 110

Там в коде не найдена строчка «Русские не сдаются»?
НЛО прилетело и опубликовало эту надпись здесь
сомневаюсь, что тут именно копипаст, больше похоже на опечатку
Копипастить простые циклы это конечно ок идея…
Хотя с другой стороны вижу что ограничитель (w.GetNumPoints()) не вынесен в переменную дабы не вызывался метод каждую итерацию, так что всё может быть :)
вы также не видите, меняется это значение внутри цикла или нет. Все может быть :)
Скорей всего метод заинлайнен и нет смысла выводить в отдельную переменную.
Далеко не факт, я очень часто наталкиваюсь на такой оптимизационный «ляп».
В данном случае оптимизация крайне проста и не уменьшает читабельность кода, поэтому лучше сразу писать правильно, имхо.
Отладка кода делиться на две фазы:

Первая: Почему оно не работает.
Вторая: Как оно вообще может работать. (o_0)
Жду исправленный Doom3 с блекджеком :)
а разве дум3 без них бывал?
эти монстры это моральный облик части окружающих нас людей…
нам показали какэто выглядит… жаль не все увидели… хотя страху натерпелись :+))
Интересно, что они не исправили недочеты, хотя пользуются PVS-Studio.
Как я написал в статье, скорее всего это связано с тем, что часть кода не используется.
Как это?
Запускают анализатор для Doom4, находит старые баги, они лезут их исправлять и в Doom3?
Имхо, маловероятно.
Кто сказал что они пользуются PVS-Studio? Они может просто купили лицензию, поиграли и забросили. Или используют в других своих проектах.
Возможно. Не знаю.
Пару раз в твиттере Кармака видел комменты по поводу PVS-Studio
А с каких пор вы «Intel’s PVS-Studio»? о_О
Это он поначалу не разобрался. Видимо, читал нашу статью на сайте Intel. Вот и решил, что это их.

Кстати именно из-за таких вещей и нельзя писать статьи без рекламы конкретного продукта. Поясню мысль: www.rsdn.ru/forum/cpp.applied/4474127.1.aspx
Я вообще к ним отношения не имею, просто подписан на твиттер Кармака
Так Дум3 вышел ещё когда PVS-Studio ещё в помине не было вроде как.
Пулл реквест то послали?
А зачем?
Меня вопрос аж в тупик поставил. Как это зачем?

Нашли ошибки в коде, который, скорее всего, будет очень востребован в ближайшем будущем. Кто-то возможно потратит кучу времени и сил, когда с ними столкнется. А вам вот прямо сейчас ничего не стоит их исправить. Да просто ради уменьшения энтропии вселенной хотя бы.
А почему, тем кто «возможно потратит кучу времени» должен быть я? :) Вот давайте я дам вам ключ от PVS-Studio и Вы поможете миру стать лучше. Жду Вас в почте за ключиком: karpov[@]viva64.com. Если Вы мне не напишите и не начнете этим заниматься, то Ваши слова ничего не стоят и не значат.
Мне не нужен ключ, я на С++ вообще не пишу. А вы уже потратили это время и уже нашли ошибки. И вам вот именно сейчас ничего не стоит сделать мир лучше просто нажав кнопку на гитхабе. Этим самым вы сэкономите миллион человекочасов многим людям и сделаете их жизнь лучше.

Хотя, действительно, а зчем? Похуй, пускай так будет.
Вот о чём я и говорю. Просто проходили мимо и решили поучить окружающих жизни.

Я всегда отписываю про найденные ошибки разработчиков. Но мне уже надоели доброхоты, рассказывающие как мне надо поступать. Я специально теперь предлагаю им самим сделать добро. И они всегда отказываются. То он Visual Studio не использует… То на Си++ не программирует… И Вы в том числе. Очень забавно наблюдать.
Ебанные уши, я вообще веб-программист и пишу на руби. Visual Studio я в жизни не запускал ни разу и слабо себе представляю, что это вообще такое. Виндой тоже не пользуюсь лет этак 6. И да, я отправил много пулл-реквестов во всякие разные опен-сорц библиотеки с исправлениями. Какая это вообще имеет значение?

Мы сейчас разговариваем о конкретной ситуации, когда нашли ошибки, но пулл-реквест отправить — «а зачем?». Что-то это фигово вяжется с фразой про «всегда отписываю про найденные ошибки разработчикам».
Ну правильно. Давайте минусовать меня злодея, и плюсовать праведников. :) Жду в почте голосующих идеалистов. Кто займётся исправлением ошибок в Doom — тому дам ключ. Посмотрим, сколько будет желающих.
Основная мысль в том, что вы уже нашли и исправили (хотя бы «на словах») несколько багов.
И вас отделяет от полезного вклада только один короткий шаг — сделать пул-реквест.
пулл реквест кому?
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.
TTimo предлагал www.iodoom3.org/ сюда отправлять пулл реквесты.
Iсполняющий Oбязанности Дум 3. Однако.
Кошмар! В репозиториях творится полнейший ад. Каждый наровит конвертнуть исходники в свой любимы code style! Проекту нужен лидер.
or simple bug fixes
Ну да, тут ошибка есть, а в другом месте она закостылена, и после исправления тут «сломается ВСЁ» нельзя просто взять и что то исправить в коде без проверки ;)

Я конечно утрирую, но с разбегу ковырять абсолютно незнакомый проект, а уж тем более искать ошибки сам тоже не стану, да и никому не советую, поскольку есть шанс сделать ещё хуже.
При наличии данной статьи, исправление ошибок будет невероятно сложным :)
Это большая работа. Вы не учитываете, что здесь перечислены далеко не все подозрительные места.
А зачем править _все_ места?
Никто не требует от вас полноценного code-review и исправления всех багов, просто правка тех мест, которые вы заметили и описали в статье.
Да вы вообще не вправе от него что-то требовать, если честно. Вы пуллреквестите, а он — пишет статьи, двигая свой продукт. Проходите мимо, а то начинаете навязывать свое мнение людям, которые своими делами и так вносят вклад в общее дело.
Мне кажется, вам просто надо дополнить ваш анализатор функцией исправления ошибок и отправки патчей разработчикам, и проблема решится сама собой!
Только после того, как в VS реализуют кнопку «Сделать мне хорошо».
Бррр, Я думал ее уже добавили :(
Раз такое дело — давайте!
Готов прошерстить ошибки, выявленные PVS-Studio в коде Doom III.
Обещаю до Нового года отчитаться о сделанной работе (если, конечно, там не тысячи предупреждений).

Посылаю на почту это же сообщение.
Хорошо. Вот уже сегодня нескольким человекам выдали ключ — кому для Doom, кому для своих собственных проектов.

P.S. Кто будет работать с Doom, просьба смотреть, прежде чем править. А то уже были случаи. Когда два добровольцы приходят в открытый проект и первый правит код, меняя аргументы:

memset( X, sizeof( X ), 0 );
заменяет на:
memset( X, 0, sizeof( X ) );

А второй, не глядя, тоже делает доброе дело и вновь меняет аргументы:

memset( X, 0, sizeof( X ) );
заменяет на:
memset( X, sizeof( X ), 0 );

Использование подсказок от статического анализатора не отменяет необходимость думать и разбираться в коде. :)

еще cppcheck прогони, чисто посмотреть на разницу. он бесплатен.
Описал на почту. Чем просто ковырять исходники, лучше сразу полезным делом заниматься.
Я вообще PVS-Studio не люблю, но в данном случае автора понимаю. Вы предлагаете ему сделать бесплатно на благо общества некий кусок работы (оформить пул-реквест, перевести данный топик, написать письмо). Это вполне себе время (а значит — деньги). С таким же успехом можно делать заявления типа «Ну ты же врач, умеешь лечить людей — пойди после основной работы волонтёром бездомных бесплатно полечи пару часов! Не хочешь? Ну ты козел!».
Почему Вы вообще требуете от человека выполнения какой-то работы бесплатно, просто на том основании, что он может и умеет её делать?
Да никто ничего не требует, в самом деле. Ну если лениво, то и ладно. Мне искренне не понятна позиция «а зачем?».

Это как сделать скворечник, а потом выкинуть его в помойку.
Это скорее как достать досок, гвоздей и молоток. Прогнать код через статический анализатор — я не думаю что это занимает много времени. А вот оформить все это как баг репорт и сделать все необходимые действия чтобы он попал куда нужно — на это нужно время.
Да. Самое сложное — трудно понять, ошибка это или так хитро задумано. В некоторых случаях на это уходит очень много времени, кто не знаком с проектом.
Да, это серьезная и трудоёмкая работа. И вот вы ее проделали, получили плюсиков на хабре. Самое время теперь получить за ту же самую работу плюсиков на гитхабе!!1
Ды..., не проделал я эту работу! Работа у меня другая. Она более для меня полезна. И думаю для окружающих в конечном итоге тоже. Это разработка статического анализатора и популяризация этой технологии. Я только пробежался по верхам и выписал те места, где ошибки более очевидны. Разбираться с каждым отдельным сообщением у меня нет сил и времени.

И не надо делать из меня злодея. Нас мало, а проектов в мире много. Вкладывать свое время в чужие проекты не имеет смысла. Это хорошо быть героем и внимательно поработав с 1-2 Open-Source проектами, исправить в них ошибки. А мы проверяем проекты десятками. Если мы начнем их внимательно смотреть и править чужие ошибки, то вся работа остановится.
автор не просто потратил время на разбирание исходников, это реклама pvs-studio и я так понимаю она окупится; так что можно не волноваться за напрасно проведенную автором работу.
>>Какая это вообще имеет значение?

Такое, что если вы за энтропию, экономию человекочасов и прочее построение коммунизма — возьмите и сделайте. Сами. А не рассказывайте кому и что нужно срочно сделать.
Я не умею и мне жалко времени. А он умеет и это время уже потратил и все сделал. Теперь он результаты своей полезной работы берет и спускает в унитаз. Видимо, чтобы врагу не достались.
А рассказывать окружающим как жить — не жалко времени?
прокрастинация — наше все.
За уменьшение энропии, вы хотели сказать?
ну вот и иди в жопу со своими учениями других
ты не понял. цель поста — попиарить pvs studio, а не что либо поправить. Поэтому и отправлять никто ничего не будет, очевидно же. В прошлый раз правда за такой отклик мне влупили полгода r/o, так что считай реклама проплачена.
Кто-нибудь может посоветовать такой же, но только с пурпуровыми пуговицами для java?
Ну… Тяжело сравнивать, так как на С++ писал очень давно, а PVS вообще никогда не использовал, но свой код прогоняю через FindBug. Есть еще PMD check.
например, в IntelliJ IDEA (даже в бесплатной community edition) есть богатый набор разнообразнейших инспекций для статического анализа кода
www.jetbrains.com/idea/
В Java очень большое число подобных грабель просто не может возникнуть.
Хотя, конечно, там есть и свои.
Несомненно откопипастить 2 одинаковы строки и забыть поменять или ошибиться инкрементом в for-е невозможно, это все полохой с++.
Не знаю, как там в 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.
помимо Idea можно посмотреть checkstyle и findbugs
PMD еще есть.
Не думаю, что когда-либо буду использовать сей чудесный продукт, но чувство, что прикоснулся к прекрасному — не покидает.
Всех с пятницей. Ваш К.О
PVS-studio опубликовали под опенсорсом и вы решили написать об этом в блоке «Опен Сорс»?
В PVS-Studio версии 4.50, которая выйдет в этом году, можно будет в качестве препроцессора использовать Clang, а не препроцессор от Visual C++
Так что, таки в скором времени появится версия для Linux/Mac?
Нет. Но это шаг…
Ну алеллуйя))) Так можно перепилить его в качестве плагина для llvm+clang и все счастливы будут)
Перепелить можно все что угодно. Но написано было об использовании clang в качестве препроцессора.
Да. Вот она: PVS-Studio для Linux (всего 5 лет и надо было подождать :).

Вы злой человек. Не надо отвечать на комментарии пятилетней давности. Я из-за вас себя старым сейчас почувствовал.

Я и есть зло.
Было бы хорошо, если бы вы прогнали через PVS-студию проект с большим количеством шаблонов и классов. А также показали как ваш продукт можно заинтегрировать в сторонюю систему сборки, которая использует компилятор Microsoft Visual C++.
>> Было бы хорошо, если бы вы прогнали через PVS-студию проект с большим количеством шаблонов и классов.

Называйте проект. Должен иметь солюшен для VS.

>> А также показали как ваш продукт можно заинтегрировать в сторонюю систему сборки, которая использует компилятор Microsoft Visual C++.

www.viva64.com/ru/d/0007/
> Называйте проект. Должен иметь солюшен для VS.

Google Chromiium :)
Эх, я теперь хочу чтобы вы посмотрели код Mozilla Firefox. Это же жутко интересно, действительно там всё так плохо как все думают говорят?
Это сложнее, так как нет сборки под Visual Studio.
cinder?
эм, Boost? :) или уже было?
Как я писал выше: «Должен иметь солюшен для VS.»
а у буста нет? значит примите извинения :)
мб clanlib
aalib + bb
например, в IntelliJ IDEA (даже в бесплатной community edition) есть богатый набор разнообразнейших инспекций для статического анализа кода
www.jetbrains.com/idea/
Вы блогом ошиблись, тут речь про С++, а не Java.
я ошибся местом вставки комментария :) Это я отвечал на: «Кто-нибудь может посоветовать такой же, но только с пурпуровыми пуговицами для java?»

Ох, а я пропустил ту ветку и не увидел аналогичный комментарий :)
Чёрт. Я тогда вообще не понимаю, как этот Doom тогда в состоянии работать. Или это всё в мёртвых неработающих ветках?
А ведь там, насколько помнится, часть кода написана ещё и на некоем внутреннем скриптовом языке. Его так вообще не проверить, из-за динамики.
Здесь скорее дело в везении. В большинстве, это мины, которые просто спят и ждут своего часа. Они проявят себя при смене компилятора/настроек. Или после рефакторинга. Меняем в одном месте — глючит в другом (компилятор что-то начал иначе оптимизировать).
Фрагмент 4. Пока компилятор вначале увеличивает dir_cache_index всё хорошо.
Фрагмент 5-7. Если в недоочищенной памяти содержатся нули, то и всё хорошо (пока).
И так далее.
Зачем в статье линкеры сайта PVS студии?
Той статье больше года, а ссылки работают, картинки показываются. А вы говорите «зачем»…
Фрагмент 3, скорее всего, какой-то хитрый код нежели баг.
Несколько вопросов:
1. PVS не планирует реализовать поиск неиспользуемого кода?
2. Как насчет рекомендаций по оптимизации кода? (или рефакторинг под определенную версию языка, например С++11)
3. Как идет работа по ускорению PVS, может представить критические участки кода в виде задач для програмистов и выложить на Хабре — решивший наиболее оптимально получает версию PVS.
1. Неиспользуемый код хорошо находится компиляторам. По крайней мере, в Visual C++. Реализовывать функциональность, которая есть в Visual C++, мы сейчас поводов не видим.

2. У нас есть задел в этом направлении (диагностики V801-V806). Но развивается он медленно. Интересней находить ошибки, чем места для микрооптимизаций. С рекомендациями по поводу рефакторинга не понятно. Прошу привести примеры.

3. В коде нет каких то особенно узких мест. Мы время от времени посматриваем профайлером. Последним по настоящим узким местом было использование vector и string. Вернее то, что они не очень удачно работали с памятью. Мы имеем некоторую высокоуровневую информацию, которая позволяет создавать и уничтожать массивы/строки более экономно. Теперь в ряде критических мест используются свои строи и массивы.
В основном сейчас скорость упирается во внешний препроцессор. Visual C++ при препроцессировании работает дольше, чем потом PVS-Studio анализирует полученный i-файл. Поэтому сейчас оптимизировать что-то в PVS-Studio глупо, раз больше половины времени работает не он, а cl.exe. Вот когда перейдем на Clang, тогда можно будет смотреть внимательнее. Сейчас это не то место. :)
2. делегирование конструкторов и универсальная инициализация, auto, nullptr, smart pointers, wrapper references — это наверное основное. А вообще интересен хотя бы полуавтоматический перевод старых проектов на C++11, тут как раз без проверки ошибок не обойтись.
«Использовать конструкции C++11» — это слишком абстрактно. Хочется более конкретные рекомендации с примерами. Для каких конструкций что советовать. Если удобнее, можем пообщаться в почте.
Кстати, многие из этих ошибок мне нашёл сам Clang с опциями -Wall -pedantic
Вот это я называю грамотной рекламой. И продукт описали, и читать интересно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий