LINUX.ORG.RU

Открыт исходный код статического анализатора Infer

 , ,


3

4

Компания Facebook опубликовала исходные коды статического анализатора Infer, который используется внутри компании для выявления ошибок в исходном коде программ без их непосредственного запуска.

В настоящее время Infer умеет обнаруживать следующие проблемы в программах, написанных на C, Java и Objective-C:

  • разыменование NULL-указателей;
  • утечки памяти и ресурсов.

Исходный код Infer написан на языке OCaml и распространяется на условиях лицензии BSD.

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: CYB3R (всего исправлений: 3)

Ответ на: комментарий от ymn

А что еще есть? Накидай ссылок.

Есть Clang, который в 100 раз больше умеет.

Есть Coverity за деньги, с которым никакие опенсурцные поделки на борщеязыках никогда не сравнятся.

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

да-да, те самые, на которые программисты после второго десятка предупреждений перестают обращать внимания вообще. :)

Смотрю на более чем 20000 сообщений от coverity, среди которых, ценой неимоверных усилий было найдено три реально заслуживающих внимания, и думаю, что ты таки прав. Баловство все это.

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

Потому что он позволяет сделать работу быстрее, чем любой другой // К.О.

Сделать работу - это 1% от всей работы. 99% это поддерживать результаты сделанной работы. И в этих 99% всякие сраные борщеязыки сосут.

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

Не, таки годнота. Если запустить так:

./gradlew clean; infer -a checkers -a eradicate -- ./gradlew build
то он неплохо пройдется по nullable указателями.

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

Это такой недохаскель с «объектами» :) Шутка. На самом деле — дальнейшее развитие ML. От него произошел Фа-диез.

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

Сделать работу - это 1% от всей работы. 99% это поддерживать результаты сделанной работы

Раздался голос из аутсорсного бодишопа.

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

Аледятел, это соотношение сохраняется в любой индустрии, в любой области. В том числе и для ядра лялеха.

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

Сделать работу - это 1% от всей работы. 99% это поддерживать результаты сделанной работы

Раздался голос из аутсорсного бодишопа.

Аледятел

Дятел здесь ты.

это соотношение сохраняется в любой индустрии, в любой области

Соотношение 99:1? Ты бредишь.

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

нетбинс может в статике угадать, где в рантайме случится nullpointer? Отсыпь и покажи, где эта магическая опция находится.

stevejobs ★★★★☆
()

Пытался использовать для анализа iOS-проекта, так Infer тянет с собой свою сборку Clang, а Apple ещё не всё отправила в upstream (LLVM), что поставляется в их версии Clang, которая идёт в Xcode, например «__nullable».
В результате практически любой iOS-проект может быть собран собран, а как следствие проанализирован с помощью данного иструмента.

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

Соотношение 99:1? Ты бредишь.

Я преуменьшаю. На самом деле поддержка намного больше чем 99% от стоимости любого проекта.

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

Уж больно название весёлое и говорящее =)

А почему на http://radare.org/r/cmp.html написано Decompilation - no,no,no хотя «Radare2 is able to assemble and disassemble»? Или имеется в виду декомпиляция до исходного языка?

Интерфейс - всё тот же HJKL-кошмар вимера?

Как вообще в нём работается, по личным впечатлениям(сравнения-то я почитал)?

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

Декомпиляция - это до исходного кода или псевдокода.

Работается отлично, привыкается долго. Но есть и webui - http://cloud.rada.re/p/, только вот умеющих и желающих писать на javascript у нас немного, чтобы его развивать.

А декомпиляция обязательно будет - работаем над этим - http://radare.today/update-from-the-gsoc/

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

но для С valgrind как-то привычнее.

С каких пор валгринд стал статическим анализатором?

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

См. выше, уже ответил, некоторые вещи ловит, хватает. Но чаще я вместо статического анализа пускаю valgrind на юнит-тестах. Этот хорошо ловит.

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

Почему же к сожалению, на чем ты пишешь? Я вот, к сожалению, пишу на C++ и страдаю.

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

Мы в radare2 используем как Coverity, так и valgrind, особенно поверх набора тестов.

По нутрям Coverity есть какая-нибудь информация? Интересовался методами, которые он использует, не нашел ничего.

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

Но чаще я вместо статического анализа пускаю valgrind на юнит-тестах. Этот хорошо ловит.

Так к валгринду претензий нет. Только он ничего не знает про код, который не исполняется под его управлением.
По этой причине статический анализатор очень важный инструмент.

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

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

Iron_Bug ★★★★★
()

Для джавы можно сразу на kotlin писать, и анализатор будет не нужен, потому что язык с явным null.

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

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

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

На самом деле поддержка намного больше чем 99% от стоимости любого проекта.

146%, не меньше

annulen ★★★★★
()

Эти наркоманы уже открывали анализатор плюсового кода на D. Тоже целую новость запостили из-за 100 строчек бесполезного кода.

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

Про яву уже пошутили?

«„Ява“! „Ява“! Не дрожи, шалава!» :)

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

Если делать работу правильно, то эти проценты меняются местами.

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

Там уже куски кода для анализа C++ есть, обещают скоро доделать.

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

К сожалению нет, надо искать в информации по контрактам DARPA и DHS - они вылезли с их помощью. Может публикации какие были в 200х

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

Открыт код ненужно, написанного на ненужно для ненужно, от ненужной компании.

На радость ненужнистам :-)

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

спринг гогно - он тебе такого своим AOP наколхозит что там ни анализом сорцов ни байткода нихрена не установить

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

ну теоретически, если по-настоящему размотать все пути в программе, прогнать на всех наборах данных, на всех конфигурациях, подождать месяц-другой пока оно делается, можно было бы что-то новое узнать. Для критичных по стабильности приложений. Прикинь, ты ушел в отпуск, запустил анализатор, вернулся - а у тебя в багтрекере уже автоматически появилась пачка тикетов про всяческие специальные случаи различной нереалистичности. Особенно что касается многопоточности.

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

ага для спринга который превращает яву в питон

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

> А зачем использовать такой малораспространённый язык?
Потому что он позволяет сделать работу быстрее, чем любой другой // К.О.

Во-первых, ИТ - не собачьи бега, спешка не нужна. _Сложный_ проект, будь он написан хоть за неделю, всё равно потребует тщательной обкатки - тут ты «быстрее» ничего не сделаешь.
Во-вторых, «быстрее» может быть только язык черепашки для рисования, все остальные языки - универсальные и отличаются степенью низкоуровневости и богатства библиотек. На какие-то проценты МОЖЕТ быть быстрее, но это вообще не критичный параметр. Куда важнее, чтобы написанное можно было сопровождать, оно не падало и приемлемо решало задачу. И вот как раз в «сопровождать» Окамл сливает в чёрную, ибо маргинальщина - нанимать на такой «уникальный» долбокод прогеров со стороны - тот ещё гемор.
В третьих, я вообще не помню, чтобы в ИТ индустрии было какое-то обилие какамло-проектов - это уже что-то говорит о подобных языках.

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

нанимать на такой «уникальный» долбокод прогеров со стороны - тот ещё гемор

Это твой опыт или ты наслушался анонов?

я вообще не помню

ну ок.

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

Окамл сливает в чёрную, ибо маргинальщина - нанимать на такой «уникальный» долбокод прогеров со стороны - тот ещё гемор.

Назови, пожалуйста, язык программирования, на котором пишется не долбокод не маргиналами, наём которых не является гемором?

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

> унификация инструментов - это большой плюс ВСЕЙ компании
Чо, правда? А может, плюс — это использование инструментов там, где они подходят?

Если речь о забивании гвоздей и резке труб - да. На деле же, аналогия будет такая: есть море деталей, которые нужно скреплять и у нас есть винты, шурупы, клей, изолента... И даже в последней есть смысл - она легко отрывается от пластика. Но тогда тебе нужно хренову тучу людей, каждый из которых умеет обращаться только с одним крепежом и увы, «мастер по изоленте» НИ ХРЕНА не может улучшить в крепеже, который делал «джедай шурупов». И что важно, тебе не нужны ВСЕ ОНИ на постоянке: сделал крепёж - ну и как бы до свидания, для _поддержки_ всех крепежей мне нужно буквально чел-два. Вопрос: не дурак ли ты, что наделал десять РАЗНЫХ крепежей и теперь молишься, чтобы оно не упало? Не выгоднее ли иметь пять мастеров, которые починят ЛЮБОЙ крепёж, чем 50 «каждый сам себе мастер»?
Время экспериментов прошло, сейчас не 70-ые, новых «ЛИСП"ов не будет. Языки устоялись и теперь настало время пилить сами инструменты, чтобы максимально облегчить разработку. Ну, это моё видение, но ты можешь продолжать мешать в голове солянку из разных языков - у тебя на это есть море времени и денег. :)

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

Назови, пожалуйста, язык программирования, на котором пишется не долбокод не маргиналами, наём которых не является гемором?

Очевидно же, C# и Java. Оба относительно просты, императивны, изучаются новичками в течении недели. Нанять спецов по таким языкам - проще ковыряния козявки. Есть устоявшиеся библиотеки, шаблоны и инструменты. Код на таких языках не пропадёт, за разумное время его всегда может подхватить специалист со стороны. Это и есть интыпрайз! Лезть сюда с хацкелями и окамлами - это бессовестно подкладывать работодателю тайм-бомбу - рано или поздно этот код всё равно выкинут, наймут 10 грошовых прогеров и напишут на индустриальном языке.

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

Маня, анализаторы кода, канпеляторы и прочие хитро-мудрые вещи, написуемые в основном бородатыми дядями и тётями с тяжёлым академическим бекграундом, это не твои интерпрайзные круды и рассуждения из мира массового производства софта макаками за отпуск в Египте к ним слабо применимы.

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

> нанимать на такой «уникальный» долбокод прогеров со стороны - тот ещё гемор
Это твой опыт или ты наслушался анонов?

Был опыт, но не найма, конечно - систему переписывали. На Жабе взамен FoxPro. Очевидно, что найди пучок жабоклепателей намного легче, чем динозавров, что-то ещё помнящих из 80-ых.
Я так понимаю, ты хочешь поспорить с тем, что в мэйнстриме не нужно пользоваться маргинальными языками? Приводи аргументы штоле, чо сидеть и спрашивать очевидное?

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