Ну я пользуюсь Vim в коммерческой компании (на работе), так что ваше изначальное утверждение про «ни в одной коммерческой компании не используют» уже не верно. И некоторые коллеги мои в текущей компании и бывшие коллеги в других компаниях тоже пользуются. Их не много, но они есть. Я же не редактирую 100% текста в IDE, весь plain text, что не в IDE (которых, кстати, несколько) — в Vim. Ну и в тех IDE, которые это нормально умеют, у меня включен Vim mode.
Вы вот вроде пишете разумные вещи в соседних ветках, предлагаете не напрыгивать на mc, его пользователей и авторов, а сами, не разобравшись в том, почему люди любят Vim и Emacs, напрыгиваете на них.
Почему ни в одной коммерческой компании не используют vim или emacs в качестве IDE
Потому что они не IDE, а текстовые редакторы?
Потому что это не удобные способы работы с текстом, дающие низкую продуктивность, и имеющие неадекватно высокий порог входа.
Потому что это супер удобные способы работы с текстом, дающие высочайшую продуктивность, но имеющие неадекватно высокий порог входа. FTFY.
И да, как я уже написал выше, они — не IDE, они очень крутые текстовые редакторы, из которых некоторые пытаются сделать IDE.
Какой смысл в 2015 году продолжать поддерживать 32-битную версию приложения? Если ее выбросить, вдвое уменьшится время на сборку билдов и уйдет порядочная часть #ifdefов.
почему разработчики того же ядра или другие люди связанные с Linux, свободной, чистокровно открытой платформой не гнушаются Coverity, с помощью которой постоянно проверяет ядро мейнтейнерами? Ведь это чистая воды поприетарщина которая от вас отличается лишь масштабом финансирования
Coverity отличается от PVS-Studio очень сильно, а не «лишь масштабом финансирования». Coverity пишет предупреждения в стиле «А вот если условие в if (...) в строке 120 будет true, а счетчик i в for (i =… ) в строке 130 будет 7, то в строке 140 в выражении a[i] у вас будет выход за границы массива, потому что массив объявлен в строке 50 как int a[N], а N определен в строке 10 как int N = 5». PVS-Studio так делать не умеет.
А, разобрался, у меня была в настройках вбита лицензия ещё с 2009 года. Вытер и лицензия стала Trial.
Проверил несколько файлов, отключил 64-битные предупреждения, оставил только GA:
Туча предупреждений на код в файлах c:\Windows Kits\Include\shared\minwindef.h, c:\Windows Kits\Include\um\winnt.h, winuser.h, shellapi.h и пр.
V677 Custom declaration of a standard 'SHORT' type. The system header file should be used: #include <WinNT.h>. winnt.h 344
Исключил весь C:\Windows Kits, не ясно только, почему он не исключен по умолчанию.
V668 There is no sense in testing the 'task' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error.
В классе определен operator new, который возвращает NULL при неудаче.
V668 There is no sense in testing the 'newPointee' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error.
В шаблонной функции вызывается newPointee = new T();, где T — параметр шаблона. Откуда уверенность, что в T не перегружен operator new?
V512 A call of the 'memcmp' function will lead to underflow of the buffer '& OpPattern'.
V512 A call of the 'memcmp' function will lead to underflow of the buffer '& maxSupportedOpPattern'.
Анализатор решил, что программист должен сравнивать структуры полностью, а в коде сравниваются только первые 12 байт «префикса».
V571 Recurring check. The 'if (((HRESULT)(hr)) >= 0)' condition was already verified in line 2124.
Ну как бы да, лишняя вложенная проверка. Но это никак не влияет на работоспособность кода.
V580 An odd explicit type casting: (void * *) & pInterface. Consider verifying it.
Типичный каст для COM. Проверифаить все вызовы QueryInterface не представляется возможным.
Ну что я о плохом да о плохом:
Нашел одну ошибку типа
V519 The variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 7195, 7196.
Другое дело, что это скорее всего где-то дальше в коде обрулено, но всё равно надо починить.
V690 The 'Class' class implements the '=' operator, but lacks a copy constructor. It is dangerous to use such a class.
Эти предупреждения тоже стоит изучить детальнее.
Но в общем и целом мало что изменилось — реальных ошибок очень мало и их очень тяжело выискивать среди десятков и сотен приведеных выше false positiveов. В общем, как я уже писал выше — добавлять в CI и чинить/глушить новые предупреждения. Времени на починку 1000 подобных предупреждений, из которых менее 1% валидны никто не даст.
По опыту использования PVS-Studio в 2009-2010 году могу сказать, что для того, чтобы найти одну реальную ошибку нужно было пролопатить сотни, если не тысячу предупреждений ни о чём. Это же кстати относится и к статическому анализатору VS2013 и Coverity 6. Вам об этом разработчики и пытаются сказать, возможно слишком резким тоном. Вы им: «да ваш год отстой, 80% указателей не проверяются перед использованием», а они вам «да ваш статический анализатор отстой, у вас 80% предупреждений ни о чём». Чтобы зря друг на друга не наезжать и не переливать воду в ступе, разработчикам Miranda NG нужно было бы написать статью «PVS-Studio получает приз «чемпион по ложным срабатываниям»», но вам за статьи деньги платят, а Miranda NG это чистый энтузиазм, поэтому такая статья врядли появится.
Единственный вариант использования статических анализаторов, который я вижу — это подключить их к CI и в обязательном порядке просматривать новые предупреждения. Их будет не очень много и с ними можно будет справиться. Починить же тысячи предупреждений (большинство из которых false positive) в проекте с многолетней историей по-моему не представляется возможным.
Если вы будете наследоваться от класса и использовать его через указатель на базовый класс — то вам нужны в базовом классе виртуальные функции, которые вы будете в наследнике переопределять, и, соответственно, виртуальный деструктор, чтобы можно было корректно удалить объект через указатель на базовый класс.
Если вы будете наследоваться от класса и использовать его через указатель или ссылку на наследника, то есть неполиморфно, то ни виртуальные функции ни виртуальный деструктор вам не нужен.
Вы вот вроде пишете разумные вещи в соседних ветках, предлагаете не напрыгивать на mc, его пользователей и авторов, а сами, не разобравшись в том, почему люди любят Vim и Emacs, напрыгиваете на них.
Потому что они не IDE, а текстовые редакторы?
Потому что это супер удобные способы работы с текстом, дающие высочайшую продуктивность, но имеющие неадекватно высокий порог входа. FTFY.
И да, как я уже написал выше, они — не IDE, они очень крутые текстовые редакторы, из которых некоторые пытаются сделать IDE.
Круто у вас 3500 галлонов превратились в 35000.
Время пожатия в tar миллиона мелких файлов, например, или время компиляции проекта.
А можно посмотреть официальное демо-видео:
.
Coverity отличается от PVS-Studio очень сильно, а не «лишь масштабом финансирования». Coverity пишет предупреждения в стиле «А вот если условие в if (...) в строке 120 будет true, а счетчик i в for (i =… ) в строке 130 будет 7, то в строке 140 в выражении a[i] у вас будет выход за границы массива, потому что массив объявлен в строке 50 как int a[N], а N определен в строке 10 как int N = 5». PVS-Studio так делать не умеет.
Проверил несколько файлов, отключил 64-битные предупреждения, оставил только GA:
Туча предупреждений на код в файлах c:\Windows Kits\Include\shared\minwindef.h, c:\Windows Kits\Include\um\winnt.h, winuser.h, shellapi.h и пр.
Исключил весь C:\Windows Kits, не ясно только, почему он не исключен по умолчанию.
В классе определен operator new, который возвращает NULL при неудаче.
В шаблонной функции вызывается newPointee = new T();, где T — параметр шаблона. Откуда уверенность, что в T не перегружен operator new?
Анализатор решил, что программист должен сравнивать структуры полностью, а в коде сравниваются только первые 12 байт «префикса».
Ну как бы да, лишняя вложенная проверка. Но это никак не влияет на работоспособность кода.
Типичный каст для COM. Проверифаить все вызовы QueryInterface не представляется возможным.
Ну что я о плохом да о плохом:
Нашел одну ошибку типа
Другое дело, что это скорее всего где-то дальше в коде обрулено, но всё равно надо починить.
Эти предупреждения тоже стоит изучить детальнее.
Но в общем и целом мало что изменилось — реальных ошибок очень мало и их очень тяжело выискивать среди десятков и сотен приведеных выше false positiveов. В общем, как я уже писал выше — добавлять в CI и чинить/глушить новые предупреждения. Времени на починку 1000 подобных предупреждений, из которых менее 1% валидны никто не даст.
В окошке где должны быть результаты
И красным по черному окну Clicks remaining: 18 (can be extended). Это я видимо уже дважды кликнул по надписи о некорректной лицензии.
Единственный вариант использования статических анализаторов, который я вижу — это подключить их к CI и в обязательном порядке просматривать новые предупреждения. Их будет не очень много и с ними можно будет справиться. Починить же тысячи предупреждений (большинство из которых false positive) в проекте с многолетней историей по-моему не представляется возможным.
Если вы будете наследоваться от класса и использовать его через указатель или ссылку на наследника, то есть неполиморфно, то ни виртуальные функции ни виртуальный деструктор вам не нужен.