LINUX.ORG.RU

Диагностики Clang - это хорошо, но недостаточно

 , , , ,


1

4

Я продолжаю популяризировать методологию статического анализа и заодно инструмент PVS-Studio. Недавно я писал о проверке компилятора GCC, теперь же я добрался до LLVM (Clang). Подробности изложены в статье:

Находим ошибки в коде проекта LLVM с помощью анализатора PVS-Studio

Проверка была выполнена в Linux. Хочу напомнить, что недавно мы выпустили первую версию для Linux (подробности).

Результат ожидаем, анализатор PVS-Studio с легкостью смог найти ошибки, что говорит нам о пользе подобного инструментария. Специализированные инструменты статического анализа, такие как PVS-Studio, всегда будут опережать компиляторы в диагностических возможностях и гибкости настройки при работе с предупреждениями. Собственно, на этом разработчики анализаторов и зарабатывают свои деньги.

Примечание. Прошу оставить в стороне тему, что мы не сотрудничаем со студентами, сообществом открытых проектов и т.д. Честно, мы обдумываем, что и как можем сделать в этом направлении. Но пока не определились. Когда мы дозреем, я напишу сюда, и мы всесторонне рассмотрим и обсудим варианты. А пока, я буду оставлять многие вопросы, связанные с лицензированием без ответа, так как не вижу смысла в беспредметных обсуждениях.

И поздравляем всех с Хеллоуин.

Отчёт разработчикам я отправил (хотя, думаю, Вы и сами это сделали уже. Но мало ли :))

Насчёт OpenSource, студентов и такого. Давали бы лицензию бесплатную и полнофункциональную для открытых проектов (вроде как Qt делает). Все бы довольны были. Ну или даже интеграцию с ГитХабом сделать, как Coverity. Но у Вас наверняка есть веские причины, почему Вы так до сих пор не сделали.

zamazan4ik ★★ ()

кыш

Andrey_Karpov_2009 опять притащил сюда свою рекламу с аргументацией «наш анализатор лучше анализирует, потому что нашёл ошибки в другом анализаторе», а единственную тему, касающуюся пользы для обычных людей и свободных проектов (тащемта, одной из основных тем LOR), он просит «оставить в стороне».

sudopacman ★★★★★ ()
Ответ на: кыш от sudopacman

Re: кыш

притащил сюда свою рекламу без аргументации с кучей воды

Очевидный фикс

anonymous ()
Ответ на: комментарий от intelfx

И? Я хотел знать, что это за конкретно ревизия, какой она имеет статус. Эта ревизия в продакшне или только в разработке?

invy ★★★★★ ()
Ответ на: комментарий от invy

Я подумал, что ты не знаешь, что означает это число.

Вероятно, транк на момент тестирования.

intelfx ★★★★★ ()

Диагностики PVS-Studio - это достаточно, но нехорошо

Переведите уже сообщения анализатора на английский, я не могу от смеха читать.

anonymous ()

Маркетинг на ЛОРе, бессмысленный и беспощадный.

ashot ★★★ ()

Специализированные инструменты статического анализа, такие как PVS-Studio, всегда будут опережать компиляторы в диагностических возможностях и гибкости настройки при работе с предупреждениями.

Всегда? Мне только кажется, что у компилятора больше информации об исходном коде, чем у любого другого анализатора (без возможностей компилятора)? И вопрос только во времени. Ни сегодня завтра кто-то стартует инициативу - и всё. Через год другой все будет удивлены, почему уже давным давно этого не сделали. Вопрос одного очень инициативного человека, который умеет увлечь за собой энтузиастов. А компании подтянутся само собой.

gag ★★★★★ ()
Ответ на: комментарий от hateyoufeel

Когда поддержку Rust или Haskell ждать?

Ненужно, на них не бывает ошибок.

anonymous ()

И поздравляем всех с Хеллоуин.

А просклонять? У вас там в PЁS-Studio не только английский не знают?

anonymous ()
Ответ на: комментарий от zamazan4ik

Отчёт разработчикам я отправил

В llvm-dev@ до сих пор никто не отреагировал, видимо, всем наср не очень интересно.

DELIRIUM ☆☆☆☆☆ ()
Последнее исправление: DELIRIUM (всего исправлений: 1)
Ответ на: комментарий от gag

Мне только кажется, что у компилятора больше информации об исходном коде, чем у любого другого анализатора (без возможностей компилятора)?

Странное утверждение. Анализаторы кода строят такое же AST, что и компиляторы. Я даже больше скажу, на само деле не AST, а DT (дерево разбора), где остаются избыточные узлы. Например, в AST скобки в этом выражении (a + b) + c будут отброшены, так как лишние. А вот в DT они сохранятся, что позволяет легче заметить какие-то опечатки и т.д. Так что у анализаторов даже больше возможностей по поиску ошибок. А основная задача компилятора быстро компилировать код.

Andrey_Karpov_2009 ()

Кстати, вот вопрос: ЕМНИП вы проверяли вашу студию вашей студией, а clang-analyzer вы на свой код натравливали? И чем вы собираете саму студию? Не clang'ом ли?

DELIRIUM ☆☆☆☆☆ ()

Прошу оставить в стороне тему, что мы не сотрудничаем со студентами, сообществом открытых проектов и т.д.

Это не хабр. Тут такое не работает.

Вот до тех пор, пока не будете сотрудничать — иди те ка на тот же хабр, там аудитория стадных кретинов без проблесков идеологии — они схавают. Тут Нет.

anonymous ()

для умного анализатора по сути нужно почти что выполнение программы и как минимум глубокая проверка параметров printf, хотя компиляторы и так проверяют их

anonymous ()
Ответ на: комментарий от DELIRIUM

ЕМНИП вы проверяли вашу студию вашей студией

Да. http://www.viva64.com/ru/b/0382/

А clang-analyzer вы на свой код натравливали?

Такая проверка выполняется каждую ночь. Подробности можно найти в статье, приведённой выше.

И чем вы собираете саму студию? Не clang'ом ли?

И Clang-ом тоже.

Andrey_Karpov_2009 ()
Ответ на: комментарий от zamazan4ik

Давали бы лицензию бесплатную и полнофункциональную для открытых проектов (вроде как Qt делает)

Не знаю, что такое «открытые проекты», но о какой бесплатной лицензии речь? Qt свободен уже много лет. Что им еще «давать»?

Zmicier ★★★★★ ()
Ответ на: комментарий от Andrey_Karpov_2009

Странное утверждение. Анализаторы кода строят такое же AST, что и компиляторы.

Ага, у анализатора с компилятором, оказывается, много общего.

Я даже больше скажу, на самом деле не AST, а DT (дерево разбора), где остаются избыточные узлы. ... Так что у анализаторов даже больше возможностей по поиску ошибок.

Что-то не отбросить проще, чем наоборот: знать, что можно отбросить. Так что в компиляторе это должно быть не очень сложно добавить...

Так что у анализаторов даже больше возможностей по поиску ошибок.

...и возможностей станет по крайней мере столько же. Потенциально.

А основная задача компилятора быстро компилировать код.

Это без "-O". А с оптимизацией у них наоборот получается (за известным мне исключением golang).

gag ★★★★★ ()

Открыл ссылку, прочитал

if ((Type & SymbolRef::ST_Debug) || (Type & SymbolRef::ST_Unknown))

Вспомним, что константа ST_Unknown равна нулю. Следовательно, выражение можно сократить:

if (Type & SymbolRef::ST_Debug)

закрыл ссылку. Мамкины оптимизаторы.

redgremlin ★★★★★ ()
Ответ на: комментарий от redgremlin

закрыл ссылку. Мамкины оптимизаторы.

При чём здесь вообще оптимизация? Прочитайте хотя бы чуть дальше.

«Не читал, но не одобряю» (c) ....

Andrey_Karpov_2009 ()
Ответ на: комментарий от gag

Не очень понятно кого и в чём вы пытаетесь убедить. :) Специализированные анализаторы мощнее компиляторов. Да, компиляторы постоянно стремятся их догонять. Анализаторы естественно тоже не стоят на месте. В результате уже пару десятилетий такие инструменты востребованы. И изменений в этом не наблюдается.

Andrey_Karpov_2009 ()
Ответ на: комментарий от Andrey_Karpov_2009

Не очень понятно кого и в чём вы пытаетесь убедить. :)

всегда будут опережать компиляторы

Это прозвучало, как «640 килобайт хватит всем» (c). Вот я и поинтересовался, откуда такая уверенность. Оказалось, что база у них общая. И разница в деталях. Так что - кто знает

Может, по аналогии с AMD CPU+GPU=APU появится компилятор+анализатор=компилизатор :)

gag ★★★★★ ()

хах, решил я, значит, потестить сие на машинке. Но кто ж знал, что лицензия триалочка не от первого запуска, а с момента выдачи :) Вот так вот и не протестить. Вскрывать идти что ли...

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

Предложение купить. Вам смущает то, что проект распространяется под несколькими лицензиями?

Я не спец. в лицензиях, это к Zmicier, но Qt поставляется и в LGPL варианте, которые никак не мешает линковать его с вашей прогой (статическая линковка предмет вечных споров).

RazrFalcon ★★★★★ ()
Ответ на: комментарий от zamazan4ik

я про то, что Qt бесплатна для OpenSource проектов

Нет.

а для коммерческих платить надо.

Тем более нет.

Еще раз — Qt *свободна* (за исключением кое-каких мелких деталей, о которых вы скорее всего речи не ведете). Агрессивно рекламируемое г-ном Карповым изделие — несвободно.

Советовать г-ну Карпову брать пример к Кутэ — значит советовать *освободить* их программу. Это было бы славно, никто не спорит, но думать, что он на это пойдет — крайне наивно.

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Советовать г-ну Карпову брать пример к Кутэ — значит советовать *освободить* их программу.

А есть статьи фирмы (той, что сейчас, и тех что были раньше), продающей лицензии на Кутэ, в которых они бы рассказали, как у них получается и продукт освободить, но основных клиентов с поводка не спускать? Встречается куча статей о стартапах, а вот было бы неплохо, если бы поделились этой бизнес-тайной. Она бы очень пригодилась, чтобы освобождение не ассоциировалось с накрытием бизнеса.

gag ★★★★★ ()
Ответ на: комментарий от gag

А есть статьи фирмы (той, что сейчас, и тех что были раньше), продающей лицензии на Кутэ, в которых они бы рассказали, как у них получается и продукт освободить, но основных клиентов с поводка не спускать?

Чтоб именно сами хозяева рассказали — вот даже и не знаю.

Вообще они, как вы помните, они все очень плавно делали:
— Сначала Qt был вовсе несвободен.
— Потом его выпустили под формально свободными, но весьма стремными условиями (и, разумеется, несовместимыми с GNU GPL) о том, что изменения можно распространять только патчами.
— Потом, они наконец приняли GNU GPL.
— И наконец — что совершенно удивительно для компании, живущей продажей исключений из авторского лева — GNU Lesser GPL.

Zmicier ★★★★★ ()
Ответ на: комментарий от Andrey_Karpov_2009

При чём здесь вообще оптимизация?

Следовательно, выражение можно сократить

С каких пор сокращение кода не является оптимизацией?

Прочитайте хотя бы чуть дальше

Зачем? Ошибка детсадовская — сравнение с константой, даже с нулевой, сокращать нельзя. Нафига читать человека, который делает детсадовские ошибки? Не надо прослушать все лекции Катющика, чтобы понять, что он несёт ахинею.

redgremlin ★★★★★ ()
Ответ на: комментарий от redgremlin

Там ошибка не в том, что сравнивают с нулевой константой, а в том, что её и другие используют в «битовой» маске дальше. Типа

enum E { A, B, C, D };
// ....
unsigned mask = A | B | C | D;

То есть чел предположил, что это

enum E {
  A = 0x1,
  B = 0x2,
  C = 0x4,.
  D = 0x8
};

Как раз об этом и написано дальше в статье.

DELIRIUM ☆☆☆☆☆ ()
Последнее исправление: DELIRIUM (всего исправлений: 1)
Ответ на: комментарий от Zmicier

В том, что есть Qt под LGPL нет ничего удивительного. Под этой лицензией Qt выпустили когда библиотека принадлежала Нокии. Нокия зарабатывала на другом, но нуждалась в разработчиках для своей мобильной платформы. Отсюда и выпуск Qt под LGPL.

eao197 ★★★★★ ()
Ответ на: комментарий от redgremlin

каких пор сокращение кода не является оптимизацией?

В статье нет о сокращении кода или про оптимизацию. В статье говорится, что такой код избыточен. Т.е. его можно сократить. Это подозрительно. Начинаем разбираться и выяснением что это самая настоящая ошибка. Если набраться терпения и прочитать ещё пол странички дальше, всё станет понятно.

Зачем? Ошибка детсадовская — сравнение с константой, даже с нулевой, сокращать нельзя. Нафига читать человека, который делает детсадовские ошибки? Не надо прослушать все лекции Катющика, чтобы понять, что он несёт ахинею.

Я нашел время читать этот комментарий и писать ответ. Прошу и Вам набраться терпения и прочитать чуть дальше.

Andrey_Karpov_2009 ()
Ответ на: комментарий от Andrey_Karpov_2009

В статье говорится, что такой код избыточен. Т.е. его можно сократить.

Нельзя. О том и речь, и в том и претензия. Как раз, если исправлять ошибку и сделать константы степенью двойки, то условие внезапно и перестанет быть избыточным. Именно потому, что оно никогда и не было избыточным — если константа не является математической, то на её текущее значение никогда не стоит полагаться, в процессе изменения кода её значение может измениться.

redgremlin ★★★★★ ()
Ответ на: комментарий от redgremlin

Если константа в битовой дизъюнкции равна нулю, то это по крайней мере подозрительно и в большинстве случаев означает ошибку. Так что правильно обращают внимание, и таки речь не про оптимизацию.

Хотя, справедливости ради, такую константу могут сделать нулем, если она больше не имеет смысл.

anonymous ()
Ответ на: комментарий от zamazan4ik

Насчёт OpenSource, студентов и такого. Давали бы лицензию бесплатную и полнофункциональную для открытых проектов (вроде как Qt делает).

Мы сейчас работаем в этом направлении. Ждите, скоро появится бесплатный вариант лицензии PVS-Studio. Думаю, уже к концу месяца я напишу соответствующую новость на linux.org.ru.

Andrey_Karpov_2009 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.