Pull to refresh

Comments 22

А есть ли возможность задавать кастомные аннотации функций?
Да. Есть синтаксис разметки собственных функций форматирования и работающих с памятью.
Что-то после телеметрии в win10 я недостаточно доверяю RtlSecureZeroMemory, чтобы явно сообщать этой ос, что «здесь лежат точно важные данные»
;)
Спасибо за статью — проясняет как эта «магия» работает под капотом.

Есть вопрос по поводу «Аннотирование методов (Method Annotations)» — судя по списку это работает для C++. Есть ли что-то подобное для C#?
Да, в C# анализаторе проаннотировано около 1000 методов. Это конечно меньше чем для C, C++ (там около 7000 аннотаций). Но тоже неплохо и список постепенно пополняется.
Волшебство, да и только. Спасибо за ваш труд.
А можно ли к PVS-Studio написать плагин и анотации, чтоб она стала способной анализировать своими механизмами другой язык программирования, такой как Delphi, или Python, или JavaScript?
Если Вы сможете транслировать свой код на C++/C#/Java, то подойдёт один из наших анализаторов. Другим способом проверить код другого языка не получится.
А нет ли у вас в планах затеи по организации такой возможности?

Всё равно ж уже есть поддержка трёх с-образных языков, работа на уровне не кода а дерева итогов разбора, и т.п. заходы на абстрагирование от исходного языка.

Не думаете ли развивать эти заходы в сторону более полного выделения зависимых от языка частей за рамку какого-нибудь внутреннего API и дальнейшей возможности его публикации для потенциальных сторонних разработчиков плагинов?
В планах есть поддержка других языков. Но такое решение принимается раз в несколько лет. Сейчас мы работаем над выпуском Java. Значит минимум год вся активность разработчиков будет на этом проекте.
Поддержка других языков своими силами — это прекрасно, это приблизит появление того API, про которое я говорю, хотя бы внутреннего.

Но было б хорошо, если б вы его делали прям сразу с прицелом на публикацию и использование сторонними разработчиками под любые экзотические языки, в том числе их собственные предметно-ориентированные. Что вы нынче на этот счёт думаете?
Мы пока не рассматривали задачу анализа некоторого абстрактного языка. Опыт реализации одинаковых правил для C++/C#/Java показывает, что есть много особенностей в каждом языке, которые невозможно будет обобщить. Есть потенциальная возможность сделать анализ байт-кода, это больше похоже на сформулированную задачу, нежели разработка и поддержка собственного языка. Что касается публичного API, то и сейчас мы его не предоставляем. Доработка функционала оказывается в рамках поддержки клиентов.
Дык вполне резонно правила иметь на стороне «языкового плагина».
И возможно, какую-то часть правил всё ж получится иметь в универсальном виде, пригодном для нескольких плагинов. Тогда API можно делать с рассчётом и на это…

И я конечно же понял, что API не предоставляете. Ровно об этом и пишу.
Спасибо! Интересная статья, давно собирался активно использовать анализаторы. А что вы можете сказать при анализатор, встроенный в Visual Studio?
Он слаб. Но больше мы не делаем сравнений. Как бы тщательно мы не подходили к сравнению, мы ничего не можем противопоставить комментариям в стиле «вы всё врёте» :). И действительно, как гарантировать, что мы непредвзяты? Для этого такое сравнение должны делать независимые специалисты. Но откуда им взяться? А если мы им заплатим, то они уже не будут независимыми. :)

Последний раз, когда мы делали сравнение, анализатора PVS-Studio и анализатора встроенный в Visual Studio, то наш инструмент находил более чем в 6 раз больше ошибок. Думаю, сейчас мы сможем найти ошибок в 10-20 раз больше чем VS.
Не совсем по теме вопрос. Диагностика V813 не учитывает copy elision, кажется. В C++ 17 добавлен гарантированный copy elision и VC++ его поддерживает en.cppreference.com/w/cpp/compiler_support.
Здесь можно посмотреть короткое обсуждение передачи параметров по значению stackoverflow.com/questions/33872026/copy-elision-for-pass-by-value-arguments.
V609 CWE-628 Divide by zero. Denominator 'X' == 0. The 'Div' function processes value '[0..4]'.

То есть у вас есть специальная аннотация "параметр используется как делитель"? И часто реальную пользу это приносило?

То есть у вас есть специальная аннотация «параметр используется как делитель»?
Да.

И часто реальную пользу это приносило?
В базе ошибок для такой ситуации примера нет. Но это ничего не значит. Деление на 0 это на самом деле довольно редко встречаемая ошибка.

А в целом подобные аннотации работают. Например, на вскидку вспомнилась ошибка в Android, когда неправильно используется функция bswap32. Это сработала авторазметка функции, что её результат следует как-то использовать.

То что в целом работают — это я знаю :-) Меня конкретно делитель интересовал. У нас такой нет. Видимо пока делать не будем. Спасибо за ответ!

Sign up to leave a comment.