URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 83252
[ Назад ]

Исходное сообщение
"Результаты анализа системой Coverity безопасности и качества..."

Отправлено opennews , 25-Фев-12 12:44 
Компания Coverity, развивающая инструментарий для автоматического анализа кода на предмет наличия проблем безопасности и ошибок представила (http://www.bradenton.com/2012/02/23/3896742/open-source-code...) очередной ежегодный
отчёт (http://www.coverity.com/library/pdf/coverity-scan-2011-open-...) (PDF, 550 Кб) с результатами изучения 37 млн строк кода из 45 наиболее активно разрабатываемых открытых проектов и 300 млн строк кода из 41 анонимного проприетарного продукта. В среднем, в открытых проектах было выявлено 0.45 дефектов на 1000 строк кода, для проприетарных продуктов данный показатель составляет 0.64, при этом средний показатель качества для всей индустрии разработки ПО составляет 1 ошибка на 1000 строк кода.

Система Coverity Scan была создана в 2006 году по инициативе Министерства национальной безопасности США для обеспечения и усиления безопасности информационной инфраструктуры Соединенных Штатов, в которой используются различны...

URL: http://www.bradenton.com/2012/02/23/3896742/open-source-code...
Новость: http://www.opennet.ru/opennews/art.shtml?num=33188


Содержание

Сообщения в этом обсуждении
"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 12:44 
Нормально так. Все ошибки показательны для языков программирования C, C++ и являются их генетическими дефектами. Как вывод: большие проекты на C,C++ неизбежно будут страдать от ошибок программиста отслеживать в ручную управлением памятью и пр.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 14:45 
> страдать от ошибок программиста отслеживать в ручную управлением памятью и пр.

Ну хорошо, а большие проекты вебни страдают от CSRF, XSS, insecure data handling во всех ипостасях, SQL-иньекций, ошибок разграничения доступа, ... - ну что, вам полегчало, да? :)



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Xasd , 25-Фев-12 22:40 
интересно что используя нормальные Фрэймворки -- довольно сложновато допустить: CSRF, SQL-Inj, XSS

1. CSRF

...например -- в Django сделать CSRF ошибку -- по сути можно только если НАСИЛЬНО отключить CsrfViewMiddleware

[отключают CsrfViewMiddleware (и их аналоги) в своих проектах -- только глупышки наподобие Александра Соловьёва -- https://bitbucket.org/piranha/byteflow/src/0109284f9a8d/sett... ]

2. SQL-Inj

а допустить SQL-Inj -- ТРУДНО и в случае Объектно-Реляционного-Отображения (ORM) и в случае DB-API

[зато очень ЛЕГКО допустить SQL-Inj -- в PHP при традиционном использовании там MySQL]

3. XSS

создание XSS -- опятьже -- довольно ТРУДНО в Django-подобных-шаблонизаторах, которые поумолчанию всё экранируют, кроме случаев где это не надо

############################## из этого всего делаем вывод ##############################

допускаемые ошибки -- сильно *зависят* от языка и библиотеки. а не только от опыта праграммирования


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 25-Фев-12 23:42 
>[зато очень ЛЕГКО допустить SQL-Inj -- в PHP

а где сложнее?
>при традиционном использовании там MySQL]

а с MsSQL это будет сложнее сделать?

зыж
это применимо для ЛЮБОГО языка программирования. и СУБД соответсвенно тоже.

ну а для того, кто даже прочитать доку (по-русски!!! не в каждом мсдн найдёшь :D) http://php.net/manual/ru/security.database.sql-injection.php не удосужился,... конечно пыхпых виноват.
странно что они в этом ещё сиквел-сервера не обвиняют. а то выдают понимаешь ли секюрную инфу всем подряд.
а сравненние фрэйворком с языками программирования... и не знаю как это назвать.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 26-Фев-12 00:32 
>>[зато очень ЛЕГКО допустить SQL-Inj -- в PHP
> а где сложнее?

В java через JPA или любые языки работающие с SQL через связанные переменные.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 26-Фев-12 01:29 
Ха! Через.
А jdbc там ужО отменили?
Через <подставь_нужное> можно и в <подставь_любой_язык>.
А можно даже свои фильтры написать.

Зыж
Когда в языках запретят прямой доступ к данным, тогда и придёт апокалепсис.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 26-Фев-12 02:32 
> Ха! Через.
> А jdbc там ужО отменили?
> Когда в языках запретят прямой доступ к данным, тогда и придёт апокалепсис.

В каком то смысле jdbc уже отменили. в приложении ты можешь запросить работающий EntityManager, а можешь запросить JDBC коннект.

Потому несколько следствий:
1. с точки зрения приложения JPA не обертка поверх JDBC, поскольку приложение не имеет доступа к созданию JPA-инфраструктуры.
2. JPA может быть построен поверх иных нежели JDBC коннектов с системами хранения, в том числе и NoSQL.
3. поскольку все конфигуриврование инфраструктуры идет через архитектора проекта, а на боевых серверах через админа, то даже криворукие программеры не могут применить JDBC коннекты без разрешения архитектора. Коннекторов просто не создано в инфраструктуре.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 26-Фев-12 04:40 
>В каком то смысле jdbc уже отменили. в приложении ты можешь запросить работающий EntityManager, а можешь запросить JDBC коннект.

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


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Xasd , 26-Фев-12 04:57 
> вот когда в жабе нельзя будет написать приложение, подверженное ...

причём тут "можно" или "нельзя"?

чащще всего ошибки допускаются -- в случаях когда их допустить ПРОЩЩЕ, чем НЕ допускать...

...а в случае когда-же ПРОЩЩЕ НЕ допускать ошибку, чем её допустить -- ошибки допускаются на порядок реже [если не сказать что не допускаются вообще].

выше указаны примеры библиотек/языков -- в которые постронны таким образом что ошибку (SQL-Injection, XSS, CSRF) там прощще НЕ допустить

почему я оперирую термином "библиотека/язык" (а не просто "библиотека") ??? потомучто библиотеки строятся вокруг языка, а не в сферическом вакууме


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 26-Фев-12 12:48 
> причём тут "можно" или "нельзя"?

Что ж. Объясню ещё раз.
Php — это язык. Как и java.
И там и там можно использовать различные технологии и техники.
Включая и те что приводят/не_приводят к sql-injection.
Упомянутый jpa — не язык, а технология.
Сравнивать язык и технологию более некомпетентно, чем тёплое и мягкое.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Xasd , 26-Фев-12 14:35 
>> причём тут "можно" или "нельзя"?
> Что ж. Объясню ещё раз.
> Php — это язык. Как и java.
> И там и там можно использовать различные технологии и техники.
> Включая и те что приводят/не_приводят к sql-injection.
> Упомянутый jpa — не язык, а технология.
> Сравнивать язык и технологию более некомпетентно, чем тёплое и мягкое.

хорошо.. чтобы Вы поняли мою мысль -- я спрошу вот так:

    почему в PHP -- те техники которые приводят (провоцируют) к SQL-Inhection -- не удалят из языка? (в других же языках их удалили, или не допустили изначально)


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:39 
you made my day. no, really!

"Результаты анализа системой Coverity безопасности и..."
Отправлено ананим , 26-Фев-12 14:57 
присоединяюсь. :D

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 26-Фев-12 15:08 
> почему в PHP -- те техники которые приводят (провоцируют) к SQL-Inhection -- не удалят из языка? (в других же языках их удалили, или не допустили изначально)

не знаю, почему продолжаю отвечать...
нет таких языков. нет.
в той же жабе без jdbc не будет и jpa.
их отношения примерно такие же как https и tcp/ip.
и они также смешны, как если бы вы утверждали, что https лучше, чем tcp/ip.
зыж
к примеру оракл поддерживает аж 3-и (!!!) драйвера jdbc в актуальном состоянии.
а это единственный поддерживаемый путь получать данные на языке java из субд оракл.
мс также выпускает jdbc драйвера для своей mssql, включая и для linux.
запретить формировать запрос так, как удобно разработчику (не пользователю, повторяю!) НЕЛЬЗЯ.
а то получится "пчёлы против мёда".


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 26-Фев-12 11:42 
>>В каком то смысле jdbc уже отменили. в приложении ты можешь запросить работающий EntityManager, а можешь запросить JDBC коннект.
> или возможно действительно не знаете о чём говорите (что гораздо хуже) -
> вот когда в жабе нельзя будет написать приложение, подверженное sql-injection, тогда
> и будете сравнивать технологии с языками программирования.

Пожалуйста напиши мне пример JavaEE приложения на JPA с возможностью SQL-injection. )))


PS вообще проблема SQL-inject легко могла бы решиться если в СУБД запретить несвязанные переменные. ХЗ есть ли подобная возможность в современных СУБД.



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 26-Фев-12 12:52 
Выше уже ответил.

Зыж
И ещё потом удивляются отношения к жабистам, как к курице, которая не птица.
Ззыж
И да, напишиТЕ.
Соблюдайте хоть видимость вашего образования.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 02-Мрт-12 23:06 
> PS вообще проблема SQL-inject легко могла бы решиться если в СУБД запретить
> несвязанные переменные.

Это константы запретить?
В java уже запретили что-ли?


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Tav , 27-Фев-12 01:19 
Справедливости ради, в jdbc никто не подставляет параметры в sql выражения путем конкатенации строк, для этого есть http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedSt..., исключающий возможность инъекции и улучшающий производительность, за счет того, что разбор выражения выполняется один раз.

API, в котором для подстановки параметров в sql выражения предполагается использовать конкатенацию или другие средства работы со строками, — неимоверный дебилизм.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 27-Фев-12 04:58 
>Справедливости ради, в jdbc никто не подставляет параметры в sql выражения путем конкатенации строк,

серьёзно? никто-никто? :D
пример (и не откуда-нибудь, а с IBM!!! :D)
http://publib.boulder.ibm.com/html/as400/v4r5/ic2979/info/ja...
...
ResultSet rs = select.executeQuery ("SELECT * FROM "
                + collectionName + dmd.getCatalogSeparator() + tableName);
зыж
согласно вашему пониманию справедливости утверждаю, что в пыхпыхе никто не пользуется конкатенацией при формировании запросов.
все исключительно пользуются переменными привязки, согласно документации
http://www.php.net/manual/en/pdo.prepared-statements.php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {мwhile ($row = $stmt->fetch()) {print_r($row);}


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Tav , 27-Фев-12 11:15 
В PHP prepared statements добавили позже, следуя примеру JDBC. И да, те, кто изначально испорчен общением с PHP, и в JDBC будут использовать конкатенацию.

В примере IBM в запрос подставляетсе не значение колонки, а имя таблицы — его привязать нельзя. На практике имя таблицы редко получается непосредственно от пользователя (разве что в средствах администрирования), поэтому тут проблемы нет.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 27-Фев-12 14:40 
> В PHP prepared statements добавили позже, следуя примеру JDBC. И да, те, кто изначально испорчен общением с PHP, и в JDBC будут использовать конкатенацию.

На практике наблюдаю ровно противоположенное — те кто и использовал php  столкнулись и с инжекциями, и с методами их обойти.
А вот  спорченные жабой даже не задумываются и верят что очередная жпа их спасёт.
И за примерами ходить далеко не надо — тут, на опеннете пишут, что в жабе нет меморилик, нет sql-injection и тд.
И пишут код соответсвенно.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Yankee , 27-Фев-12 12:40 
Вы бы уж говорили за себя. Потрудитесь почитать следующее:
http://codeigniter.com/user_guide/libraries/input.html
Очень познавательно будет для Вас расширить кругозор и не тявкать впредь не удосужившись погуглить, как с этим XSS (ипрочими) эффективно борятьсяв толковых фреймворках.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Карбофос , 25-Фев-12 15:14 
в хоть программировали на этих языках, или это так, точка зрения жаба/дотнет-кодера? пардон, если я ошибаюсь.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено тоже Аноним , 25-Фев-12 17:32 
Плевки жабистов и дотнетчиков в сторону Сей и Крестов на форумах - это не точка зрения, это нечто физиологическое.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 27-Фев-12 10:30 
> Плевки жабистов и дотнетчиков в сторону Сей и Крестов на форумах -
> это не точка зрения, это нечто физиологическое.

Как будто они багов в том числе и ведущих к уязвимостям не делают :)


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 15:17 
> Нормально так. Все ошибки показательны

Все программы имеют ошибки? Капитан, Вы?


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено fork8 , 25-Фев-12 15:33 
Многое пишется на явах, шарпах, но когда в статье говорится о ядре линукса, к примеру, или о бд postgres, сама критика с/c++ становится не то, что неуместной, а какой то неадекватной.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 21:23 
> большие проекты на C,C++ неизбежно будут страдать от ошибок программиста отслеживать в ручную управлением памятью и пр.

Что касается С++, то в 21-м веке уже нет никакой необходимости управлять памятью или любыми другими ресурсами вручную. Если кто-то всё еще считает, что в С++ управляют памятью руками, то он отстал от жизни лет на 10, а может и на 15.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Xasd , 25-Фев-12 22:48 
>> большие проекты на C,C++ неизбежно будут страдать от ошибок программиста отслеживать в ручную управлением памятью и пр.
> Что касается С++, то в 21-м веке уже нет никакой необходимости управлять
> памятью или любыми другими ресурсами вручную. Если кто-то всё еще считает,
> что в С++ управляют памятью руками, то он отстал от жизни
> лет на 10, а может и на 15.

печаль тут в том что некоторые не только считают, но ещё е УПРАВЛЯЮТ в C++ ресурсами вручную :-/ ...


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 25-Фев-12 23:03 
С++ надо вообще прибить как не нужный балласт между С и более высшими языками.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Карбофос , 25-Фев-12 23:22 
и тут Остапа понесло... ;) просто уровень абстракции несколько другой, но не до такой же степени, чтоб из константной строки при сложении с объектом-переменной создавать объект. o_O

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 25-Фев-12 23:31 
Вот я из-за принципа Ц++ не юзаю. Рядом со мной сидят ещё трое, вот они там х..ячат
интерфейсы на плюсах, у меня мозг вянет после их диалогов...  И главное обсуждаются
не проблемы, скжем, узких мест тех или иных алгоритмов сортировки, а как какой объект
куда-то вынуть, член в класс, классы члена в объект, всё это в конструктор, а потом
деструктор, а почему не работает деструктор, а какого фига оно не delete если тама
авто деструктор, члены, классы, члены, классы,члены, классы,.... а-а-а-а-а-а...

  


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 23:55 
> И главное обсуждаются не проблемы, скжем, узких мест тех или иных алгоритмов сортировки

Не знаю как где, но авторы С/С++ позаботились о том, чтобы прикладным программерам не нужно было обсуждать алгоритмы сортировки.
Для С есть функция qsort. Для С++ - stl::sort(). Можешь быть уверен, реализованы они через наилучший алгоритм.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено anonymous , 26-Фев-12 00:06 
наилучший?
Как насчёт почти-полностью отсортированных данных, где нужен radix,
или как насчёт большого объёма данных, где нужна комбинация radix/qsort с merge sort, т.к. qsort медленный если данные не в кеше процессора.

Надо не быть уверенным в непогрешимости инструмента а знать слабости и уметь расширять.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 00:46 
т-с-с! как ты посмел сомневаться, неверный? stl и libc созданы не человеками, но спущены богами! понятно же, что там всё наилучшее. всегда. для всего.

"Результаты анализа системой Coverity безопасности и..."
Отправлено Кирилл , 26-Фев-12 02:32 
Но там действительно наилучшие решения на данный момент времени. Всегда. Изобретать свой велосипед нет никакого смысла в этой области, даже для каких-то крайне специфичных задач.

"Результаты анализа системой Coverity безопасности и..."
Отправлено Df232z , 26-Фев-12 11:35 
Уважаемый, "наилучших" алгоритмов не существует. Для любого данного алгоритма есть случаи когда он оптимален и когда нет.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 13:47 
> Уважаемый, "наилучших" алгоритмов не существует. Для любого данного алгоритма есть случаи
> когда он оптимален и когда нет.

он не поймёт. увы.


"Результаты анализа системой Coverity безопасности и..."
Отправлено тоже Аноним , 26-Фев-12 14:42 
Раз уж вы завели ликбез-дуэт, допевайте куплет: и эта самая оптимальность алгоритма играет хоть сколько-нибудь значимую роль далеко не в любом случае. Преждевременная оптимизация и все такое.
Та же STL более чем оправдана практически везде, кроме реально узких мест. Речь, конечно, о грамотном ее применении.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:58 
ты что сказать-то хотел?

"Результаты анализа системой Coverity безопасности и..."
Отправлено тоже Аноним , 26-Фев-12 17:01 
Что стремление к оптимальности алгоритмов должно чем-то оправдываться. Процессор давно перестал быть узким местом, и практической разницы между работой оптимального и неоптимального алгоритмов добиться все труднее. И тормоза уже чаще возникают не из-за применения медленных алгоритмов, а от архитектурной кривизны велосипедов, написанных перфекционистами, брезгующими стандартными библиотеками.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 18:02 
> Процессор давно перестал быть узким местом

а мужики до сих пор не знают… наверное, ты просто всем сообщить не успел пока.

p.s. я так понимаю из твоих слов — пофигу, что пузырёк, что heap? круто.


"Результаты анализа системой Coverity безопасности и..."
Отправлено тоже Аноним , 26-Фев-12 22:36 
Сплошь и рядом - пофигу. До и после сортировки может происходить много чего интересного, да еще и не оптимизируемого, в отличие от. И внезапно оказывается, что все сэкономленное время процессор пинает балду в ожидании периферии.
Никто не спорит, что в проектах уровня PHP или PostgreSQL существуют места, где эта разница есть.
А вот в обычной программерской жизни - далеко не всегда. И испортить программу неудачным представлением данных куда легче, чем неудачным выбором алгоритмов.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 22:44 
вот что интересно: вроде бы и связно человек пишет, и вещи достаточно неглупые — а всё равно получается чушь не по теме. почему так…

"Результаты анализа системой Coverity безопасности и..."
Отправлено тоже Аноним , 27-Фев-12 09:05 
По двум причинам. Во-первых, это все-таки холиварный срач, приходится соблюдать стиль.
Во-вторых, тема началась с того, что STL на практике обычно куда лучше велосипедов. Я, собственно, этой темы и придерживаюсь.
Тут много говорили о том, что язык мало что дает - им еще надо уметь пользоваться. Так вот, чтобы сделать лучше, чем в STL, нужно очень хорошо знать язык. Обычно лучше будет не выпендриваться и не тратить время столь высококлассного специалиста на столь ничтожную отдачу.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 13:51 
> Во-вторых, тема началась с того, что STL на практике обычно куда лучше
> велосипедов.

не *куда лучше*, а *всегда лучше*. вот на что стойку сделали.


"Результаты анализа системой Coverity безопасности и..."
Отправлено тоже Аноним , 27-Фев-12 15:47 
Тут логическая нестыковка: либо вы читаете оппоненту ликбез, либо предполагаете, что ему действительно придется иметь дело со случаями, когда STL не годится.
Это два очень разных оппонента получаются, как мне кажется ;)

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 26-Фев-12 01:14 
Наилучший для общих случаев, которых 99%.
Да, исключительные условия, возможно, потребуют специальных алгоритмов, если производительность окажется неудовлетворительной, но это является скорее академической задачей, независящей от языка.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено xxx , 26-Фев-12 01:22 
>Да, исключительные условия, возможно, потребуют специальных алгоритмов, если производительность окажется неудовлетворительной, но это является скорее академической задачей, независящей от языка.

Я искренне рад за тебя, и даже завидую. Зафигачил qsort и радуешься.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Карбофос , 25-Фев-12 23:58 
ну какие-то мелочные они у тебя. ко мне коллеги обычно обращаются с просьбами расширить опциями интерфейс - не больше. я к ним - с такими же претензиями. что-то концептуальное - совещание делаем. но не дискутируем по каждой мелочи. у каждого есть строго своё поле действий. кто писал код, тот и получает тикеты. хотя, тот же проект можно переписать на сях, но много переделывать нужно будет. векторы, к примеру. не сильно хочется на realloc/malloc переходить и на связные списки. понимаю, что это фактически то же самое, только в обвеске разница. но тем не менее :) рубили бы с самого начала на сях - другое дело. а сейчас уже позно рыпаться.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено fork , 26-Фев-12 02:56 
>Вот я из-за принципа Ц++ не юзаю

С такими принципами может и с линуксом завязать, где на сях много чё написано, да ник сменить?


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено fork , 26-Фев-12 02:57 
Помарочка - на плюсах, а не сях



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 27-Фев-12 10:31 
> что в С++ управляют памятью руками, то он отстал от жизни лет на 10, а может и на 15.

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


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 26-Фев-12 00:34 
> Нормально так. Все ошибки показательны для языков программирования C, C++ и являются
> их генетическими дефектами. Как вывод: большие проекты на C,C++ неизбежно будут
> страдать от ошибок программиста отслеживать в ручную управлением памятью и пр.

н-да.

большая часть, а именно:
Разыменование NULL-указателя (Null Pointer Dereferences) 2,818
Неинициализированные переменные (Uninitialized Variables) 2,051
Повреждения памяти (Memory Corruptions) 1,551

Ошибки присутствия прямой работы с памятью. И это в 2012 году =(((


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено xxx , 26-Фев-12 01:25 
И не говори, GC также жрет неуёмно память. в runtime выполняется куча всякой левой фигни. И это в 2012 году =(((



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 26-Фев-12 02:43 
> И не говори, GC также жрет неуёмно память. в runtime выполняется куча
> всякой левой фигни. И это в 2012 году =(((

Да. Тут выбор либо ошибки в коде или CPU работает за программиста. Машина должна думать, а человек работать. Только час работы машины несоизмеримо дешевле часа работы человека. Как следствие ВСЕ, что можно переложить на машину нужно переложить на нее.

Потому либо работает GC, либо за GC вынужден работать человек. Человек ошибается намного чаще. Потому либо код дешевле (поскольку меньше багов и меньше тестирования) либо код ДОРОЖЕ за счет большего количества багов и требования тестирования.

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


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено fork , 26-Фев-12 03:27 
<Как только появится язык, который принципиально уберет часть багов из java и C# (к тому же <будет простым в применении), так сразу он начнет захват энтерпрайза.
Хочется верить, что так может быть, но до последнего времени все критичные к производительности программы делались на сях да плюсах притом с асмовскими вставками в критических случаях, ибо на языках вроде явы да шарпа - съедание памяти да падение скорости повышаются чуть ли не в геометрической прогрессии. Если все-же такой язык и возможен - это, наверное, потребует скорее аппаратного решения, а не просто синтаксиса и прочих особенностей языка, но пока такие решения проваливались.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено fork , 26-Фев-12 03:29 
Помарочка - сях да плюсах


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 26-Фев-12 11:30 
>[оверквотинг удален]
>> C# (к тому же будет простым в применении), так сразу он
>> начнет захват энтерпрайза.
> Хочется верить, что так может быть, но до последнего времени все критичные
> к производительности программы делались на сях да плюсах притом с асмовскими
> вставками в критических случаях,
> ибо на языках вроде явы да шарпа
> - съедание памяти да падение скорости повышаются чуть ли не в
> геометрической прогрессии. Если все-же такой язык и возможен - это, наверное,
> потребует скорее аппаратного решения, а не просто синтаксиса и прочих особенностей
> языка, но пока такие решения проваливались.

Начнем с начала, что в реал-тайме вообще выделение/освобождение не должны применяться. А в идеале запрещены. К этому высказыванию я вернусь позже.

Производительность бывает разная. Раньше я считал, что java не подходит для "критичных по времени" приложений типа VoIP. Фига два - сделаны сервера для VoIP на чистой java. Знаком с системой анализа трейдинговых данных (это которая выдает решения покупать/не покупать акции в течении микросекунд.

Есть целая подсистема для real-time программирования на java. В ней в real-time тредах вообще запрещено выделение памяти (как в любой максимально real-time среде). Хочешь RT - делаешь RT-thread и работая в рамках ограничений пишешь код. GC не мешает ибо для RT-тредов не актуален.

Так что на java можно делать разные приложения ;)))


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 13:54 
ну вот — чего не хватишься, всё у них запрещают. а почему, собственно, надо запрещать? потому что некоторые путают RT и «хочу все ресурсы и чтобы никто не дёргал»? или потому, что не способны даже GC с прогнозируемым временем исполнения написать?

вообще, не начинал бы ты про RT. не надо. а то у меня комплекс неполноценности будет от того, что я однажды вполне себе использовал для RT Scheme с вполне рабочим GC. и оно таки было RT. и даже работало без проблем. а оказывается, так нельзя…


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 14:22 
> ну вот — чего не хватишься, всё у них запрещают. а почему,
> собственно, надо запрещать?

Запрещать нужно для запрета совершать ошибки.

> или потому, что не способны
> даже GC с прогнозируемым временем исполнения написать?

Даже на С++ освобождение памяти динамической структуры может занять не прогнозируемое время. Элемент может содержать другой, который содержит список ... и дальше до бесконечности. Потому либо заранее ограничивать типы объектов, следить чтобы другие типа не использовались в RT коде (что упирается в человеческий фактор) либо не применять динамическое выделение памяти вообще.

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

> вообще, не начинал бы ты про RT. не надо. а то у
> меня комплекс неполноценности будет от того, что я однажды вполне себе
> использовал для RT Scheme с вполне рабочим GC. и оно таки
> было RT. и даже работало без проблем. а оказывается, так нельзя…

Я уже приводил примеры RT приложений на pure-java. Причем даже на базовом GC от HotSpot, а не на G1. Так что можно писать RT приложения с GC, но в массовом производстве грамотнее применять иные подходы.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:32 
> Даже на С++ освобождение памяти динамической структуры может занять не прогнозируемое время.

с каких пор это костылище стало эталоном? O_O

> Элемент может содержать другой, который содержит список ... и дальше до
> бесконечности.

каким образом это должно волновать инкрементальный GC с зональным аллокатором, например?


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 17:40 
>> Элемент может содержать другой, который содержит список ... и дальше до
>> бесконечности.
> каким образом это должно волновать инкрементальный GC с зональным аллокатором, например?

Я уверен, что вы умеете писать программы так, что в них не содержатся ошибки. Но большинство программистов не такие. Потому и GC делается для общего случая и языки стремятся защитить разработчика от наиболее частых ошибок.

PS вы спорите защищая С и С++ в которых найдены месторождения элементов кривой работы с памятью? Разыменование NULL-указателя (Null Pointer Dereferences), Неинициализированные переменные (Uninitialized Variables), Повреждения памяти (Memory Corruptions)?


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 18:04 
> PS вы спорите защищая С и С++

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

p.s. как будто в жабе нет memory leaks. бугога.


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 21:34 
> p.s. как будто в жабе нет memory leaks. бугога.

мемори ликов - нет (пока сама JVM не течет, но и это давно отлажено). в сферических случаях могут быть созданы огромного размера List или Map, которые только наполняются данными, но данные не удаляются. да, память закончится. Только не от утечки (сиречь память выделена, но не может быть использована из приложения), а от через мерного потребления памяти логикой приложения.

На С/С++ можно и потерять память (она не доступна из кода ибо нет ни одного указателя) и пережрать память в логике.

Более высоко-уровневые языки лечат проблему потерянной памяти (memory leak), но пережор памяти в логике кода не подвластен. Хотя не факт что пережор вообще излечим машинными методами. )))


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 21:38 
(задумчиво) совсем нет, ага. только вот пардон, заякореные данные, к которым программа никогда не обратится — это что? лично я это называю memory leak. и совсем не важно, доступен «якорь» или нет (вообще-то и в c/c++ всё доступно, ходи себе по структурам аллокатора да развлекайся на здоровье; так что даже с «недоступна из кода» ты ошибся: указатели есть, просто ты не знаешь, где их взять).

я, кагбэ, намекаю, что GC не панацея. а иногда и вовсе overkill.


"Результаты анализа системой Coverity безопасности и..."
Отправлено Аноним , 27-Фев-12 10:36 
> я, кагбэ, намекаю, что GC не панацея. а иногда и вовсе overkill.

А иногда и просто медвежья услуга. Тем более что дебилушки не умеют им нормально пользоваться и поэтому когда прога жрет эн гигз даже и не поймешь, толи она течет, толи это оно просто еще не сдулось. Поэтому типичная энтерпрайзятина на яве серваки ниже 16 ядер и 128Г оперативы за машины не считает.



"Результаты анализа системой Coverity безопасности и..."
Отправлено Аноним , 27-Фев-12 10:40 
> память закончится. Только не от утечки (сиречь память выделена, но не
> может быть использована из приложения), а от через мерного потребления памяти
> логикой приложения.

Да как ни назови, если память так или иначе утекает, это утечки памяти. Вообще, при явном управлении памяти програмер по крайней мере в курсе что он делает. А в случае GC типовой code monkey вообще обычно не может оценить что и когда произойдет. Предсказуемость работы программы во втором случае - "о, вроде 1 раз не сглючило, пошли релизить!"


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено adolfus , 27-Фев-12 21:47 
> Начнем с начала, что в реал-тайме вообще выделение/освобождение не должны применяться. А в идеале запрещены.

мне в реалтайме нужно обрабатывать поступающие из очереди запросы. И как я это сделаю не выделяя/освобождая память, если я не знаю, сколько памяти потребуется для обработки запроса, пока его не заберу?
Если вам нужно часто просить/освобождать память относительно небольшими (в среднем много меньше страницы) кусками, есть кошерный выход -- вы самостоятельно пишете аллокатор в юзерспейсе, заточенный специально под ситуацию. Ускоряет обработку неиллюзорно. Проверено на системе, которая обрабатывает до 65536 очередей с запросами, требующими для обработки от нескольких байт до мегабайта.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 28-Фев-12 00:55 
>> Начнем с начала, что в реал-тайме вообще выделение/освобождение не должны применяться. А в идеале запрещены.
> мне в реалтайме нужно обрабатывать поступающие из очереди запросы. И как я
> это сделаю не выделяя/освобождая память, если я не знаю, сколько памяти
> потребуется для обработки запроса, пока его не заберу?

Предварительное аллоцирование по максимально возможному размеру запроса. В RT все равно не будет мегабайтных XML-партянок, потому по ТЗ можно заранее предсказать размер и аллоцировать нужное количество.


PS Для soft real-time есть еще один вид тредов (помимо базовых и hard real-time).


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 04:24 
> Никакой фантастики — java, как и C# прошли в лидеры поскольку

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

> Как только появится язык, который принципиально уберет часть багов из java
> и C# (к тому же будет простым в применении), так сразу он начнет захват
> энтерпрайза.

нет. как только появится язык *ещё тупее*, чем жаба — так вот и начнёт. проблема в том, что особо тупее-то и некуда, если хочется язык хоть немного практически полезным сохранить.

а так — я тебе секрет расскажу: Smalltalk в применении прост. и gc там есть. и классы. и весьма навёрнутый отладчик с возможностью отлаживать *работающую* систему — без специальных хуков, сборок, запуском под «инструментальной средой» и так далее. а вот не захватывает он «ынтырпрайзы». потому что code monkeys cannot into Smalltalk.

товарищ Гослинг знал, что проектирует и для чего. «криэйторы, Вава, криэйторы.»


"Результаты анализа системой Coverity безопасности и..."
Отправлено жабабыдлокодер , 26-Фев-12 11:20 
Да-да, раньше вот были знатоки и профессионалы: лошадь подкуешь, запряжешь, сидишь на ней правильно, потом распрягать, чистить, корм тот же правильно подобрать нужно... А сейчас? За руль садятся, зажигание включают - и поехали. Обезьяны, чего с них возьмешь...

"Результаты анализа системой Coverity безопасности и..."
Отправлено Аноним , 26-Фев-12 11:51 
А сейчас в авариях погибают больше чем во время боевых действий. Обезьяны, чего с них возьмешь...

"Результаты анализа системой Coverity безопасности и..."
Отправлено Df232z , 26-Фев-12 11:28 
>…затачивались под стадо взаимозаменяемых обезьян. вот и весь секрет.

Как впрочем и с++. Куда то толпу симула погромистов надо было девать.нет. как только >появится язык *ещё тупее*, чем жаба — так вот и начнёт. проблема в том, что особо тупее-то и некуда, если хочется язык хоть немного практически полезным сохранить.
Я бы не назвал java тупым. Излишне много словным - да, медленно развивающимся - да. Но не тупым.
>потому что code monkeys cannot into Smalltalk

Вообще то, основной причиной по которой Smalltalk, проиграл java было то что он был на тот момент платным. А вообще есть хорошее выступления "What Killed Smalltalk" от дяди Боба:
http://www.youtube.com/watch?v=YX3iRjKj7C0


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:04 
> Я бы не назвал java тупым. Излишне много словным — да, медленно
> развивающимся — да. Но не тупым.

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

> Вообще то, основной причиной по которой Smalltalk, проиграл java было то что
> он был на тот момент платным.

и по этой тоже, конечно. но не только по этой.

p.s. я не говорю, что цпп-обезьянки чем-то сильно лучше. увы-увы.


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 14:25 
> увы, он реально тупой. да ещё и испорченый попыткой запихать туда концепции,
> которые изначально там не планировались и не были нужны. к тому
> же он совершенно неконсистентный (ага, мой любимый пример с int и
> Integer). я понимаю, зачем так было сделано, но костылями оно от
> этого быть не перестаёт.

Будь последователен - расскажи в чем неконсистентность наличия примитивного и объектного типов для одного типа данных?


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:33 
> для одного типа данных?

ты сам уже всё сказал. если до сих пор не очевидно — медицина бессильна.

p.s. помимо прочего, это нарушает базовый принцип жабы «всё на свете объект». почему, собственно, Integer — объект, а int — нет, но при этом они оба представляют целое число?

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


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 17:47 
>> для одного типа данных?
> p.s. помимо прочего, это нарушает базовый принцип жабы «всё на свете объект».
> почему, собственно, Integer — объект, а int — нет, но при
> этом они оба представляют целое число?

Да, есть косяк. Появился в лохматом году из за того, что на объектах работать слишком накладно (кроме затрат на данные еще траты на ссылку и сам объект). Потому сделали int для примитивов и Integer для объектных. Дальше ловушка обратной совместимости. Из-за этой х-ни даже авто-боксинг придумали, что есть костыль по сути.

Стоит взглянуть на новые разработки типа Ceylon или Kotlin. Вроде как там однозначные типы - все объект. При этом уже компилятор/среда отвечают за то чем это будет представлено объектом или примитивом.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 18:07 
я же сказал: я понимаю, зачем так было сделано. я не понимаю, почему жабисты при этом считают жабу нормальным языком — даже тогда компилятор мог спокойно разрулить большинство случаев. тю, даже мой простенький компилятор смолтолка (на смолтолке же и сделаный, чтобы уж совсем сравнивать) вполне приемлемо разруливает и работу с числами, и инлайнинг аксессоров.

к чему я это? к тому, что в языке для обезьян пофигу консистентность, всё равно обезьянам это неинтересно, они пишут путём копипасты.

p.s. случай смолтолка, кстати, сложнее ввиду того, что метаклассы можно наращивать уже после того, как программа запущена. пришлось читерить ещё и в VM. а у жабы всё известно наперёд (не будем вдаваться в мегакостыли с рантаймовым патчингом сейчас).


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 21:39 
> я же сказал: я понимаю, зачем так было сделано. я не понимаю,
> почему жабисты при этом считают жабу нормальным языком — даже тогда
> компилятор мог спокойно разрулить большинство случаев. тю, даже мой простенький компилятор
> смолтолка (на смолтолке же и сделаный, чтобы уж совсем сравнивать) вполне
> приемлемо разруливает и работу с числами, и инлайнинг аксессоров.

Ок. Это был маркетинговый ход для привлечения С++ ников, которых много и для которых примитивы маст-би.

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

PS еще один камень в огород java это дженерики. довольно кривое поделье, которое еще и auto-boxing вовсю использует.

PPS много такого рода вещей исправлено в целон и котлин. Посмотрим насколько они будут удачны по итогу ;)


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 21:45 
там для начала неплохо было бы саму JVM починить, с её боксингом всего и вся. а также приделать туда нормальные замыкания и TCO. концепциям сто лет в обед, а без костылей никак. ужас.

"Результаты анализа системой Coverity безопасности и..."
Отправлено Аноним , 27-Фев-12 11:06 
> там для начала неплохо было бы саму JVM починить, с её боксингом
> всего и вся. а также приделать туда нормальные замыкания и TCO.
> концепциям сто лет в обед, а без костылей никак. ужас.

Вы наверное удивитесь но замыкания в жаве внезапно! есть.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 13:56 
> Вы наверное удивитесь но замыкания в жаве внезапно! есть.

я просто буду улыбаться, глядя на очередной костыль, про который жабисты сначала кричали «не надо», а потом его мегакриво реализовали — и жабисты решили, что они теперь тоже «как взрослые».

TCO тоже реализуется при помощи системы костылей, и что?


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 28-Фев-12 00:57 
> там для начала неплохо было бы саму JVM починить, с её боксингом
> всего и вся. а также приделать туда нормальные замыкания и TCO.
> концепциям сто лет в обед, а без костылей никак. ужас.

боксинг это фишка компилятора. синтаксичекий сахарок.

замыкания в прочем тоже сахар.



"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 28-Фев-12 01:15 
боксинг — это фишка VM. которая (VM) не позволяет передавать указатели/ссылки на элементарные типы. равно как и closures — фишка VM, потому что надо поддерживать обращение к вышележащим фреймам и их копирование.

не спорь, пожалуйста — вряд ли ты занимался написанием VM. я — занимаюсь, лет уж… в общем, не цифрой выражается.


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 11:34 
> а так — я тебе секрет расскажу: Smalltalk в применении прост.
> и весьма навёрнутый отладчик с возможностью
> отлаживать *работающую* систему — без специальных хуков, сборок, запуском под «инструментальной средой»

Наверное про отладчик нужно писать для заманивания С или С++. Но явно не для java-истов у которых это out-of-box. =)))

Хочешь отлаживать работающую систему - да пожалуйста. Хоть через SSH прокинь, хоть еще как подцепись ;)))


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:00 
у жабистов. отладка. оборжака. ребятки, когда у вас будет отладчик хотя бы в половину мощности и удобства смолтолкового — вы будете получать мультиоргазмы и смотреть на всех других как на дождевых червяков.

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

p.s. ещё один повод у меня ненавидеть жабу — вполне личный: сантехники купили команду, разрабатывавшую Strongtalk. попробуй без википедии угадать, для чего.


"Результаты анализа системой Coverity безопасности и..."
Отправлено VoDA , 26-Фев-12 14:48 
> у жабистов. отладка. оборжака. ребятки, когда у вас будет отладчик хотя бы
> в половину мощности и удобства смолтолкового — вы будете получать мультиоргазмы
> и смотреть на всех других как на дождевых червяков.

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

привык сначала писать код, потом отлаживать его если есть такая необходимость ;)

PS увы web-морду не всегда просто отлаживать даже в идеальных отладчиках


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:57 
не надо читать вики-учебники. *особенно* по смолтолку. пока ты с этой системой ближко не подружишься — особого представления о ней никакие учебники и статьи не дадут. собственно, «отладчик» в смолтолке — инструмент для *разработки*, а не для просто *отладки*.

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


"Результаты анализа системой Coverity безопасности и..."
Отправлено Аноним , 27-Фев-12 10:34 
>> Никакой фантастики — java, как и C# прошли в лидеры поскольку
> …затачивались под стадо взаимозаменяемых обезьян. вот и весь секрет.

Капитан как обычно суров но справедлив :)


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 27-Фев-12 10:32 
> Машина должна думать, а человек работать. Только час работы машины несоизмеримо
> дешевле часа работы человека. Как следствие ВСЕ, что можно переложить на
> машину нужно переложить на нее.

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


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 13:57 
неа, зря ты: этот, вроде, вполне адекватный.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Некто , 27-Фев-12 06:22 
>> "будут страдать от ошибок программиста отслеживать в ручную управлением памятью"

Является ли вышеприведенный текст "генетическим дефектом" русского языка?


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 13:14 
Сегодня анализирует, завтра сама будет писать код. Не далеко до кнопки "Зделать зашибись". Так и до восстания машин докатится можно :(.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено тоже Аноним , 25-Фев-12 14:15 
Ну, на компьютере давно есть кнопка "проверить орфографию" - кто же ей пользуется?
Три предложения - три ошибки. Зато машины не восстанут.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено MrClon , 25-Фев-12 13:24 
> дереве Staging и сетевом стеке уровень качества составляет 0.97, файловых системах 0.65, драйверах 0.61

Посмотреть так вообще не понятно как оно умудряется работать, однако-же работает.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено 1 , 25-Фев-12 13:56 
так и работает... то тут отвалится, то там

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено uy2qw , 25-Фев-12 14:20 
> команда разработчиков BRL-CAD устранила более 1600 дефектов в течение 5 дней

Вот это производительность труда! Они устраняли 40 дефектов в час! Или там просто штат очень большой?


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено qux , 25-Фев-12 14:36 
Инфа непонятно откуда, гугл по "brl cad covernity" почти ничего не находит.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ваня , 25-Фев-12 14:44 
Coverity

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено qux , 25-Фев-12 14:50 
Точно, туплю. Ну по крайней мере в англ. варианте так же:

http://blog.coverity.com/uncategorized/coverity-releases-the.../


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 15:20 
> Вот это производительность труда! Они устраняли 40 дефектов в час!

И что, ты не запатчишь 40 кривых использований указателей за час например? Ну хотя если ты проприетарщик, понимаю, кто ж будет с рвением работать на дяденьку :)


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Неиван , 25-Фев-12 16:15 
> И что, ты не запатчишь 40 кривых использований указателей за час например?

Ну, некоторые люди не просто перед каждым обращением указателю пишут "if (!p) return -1" (как это, вероятно, делаете вы) а изучают код и выясняют, почему же указатель оказался нулевым хотя не должен, и исправляют ошибку там, где она возникла, а не там, где проявилась. За полторы минуты этого не сделать.

И, да, я думаю, что имеются ввиду не 40 одинаковых строк в одной функции, а 40 указателей, разбросанных по всему проекту.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 25-Фев-12 23:09 
особенно интересно, как это выяснит система анализа, у которой вообще мозгов нет, только набор правил. я так сильно подозреваю, что починили десяток реальных ошибок и вставили кучу ненужных проверок, чтобы эта дура заткнулась уже и не нервировала.

"Результаты анализа системой Coverity безопасности и..."
Отправлено Кирилл , 26-Фев-12 02:37 
"Мозги" такие же, как у человека -- находит находит подобие в заданной базе образцов.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 14:14 
нененене, господа модераторы. тут нам только что не напрягаясь решили основную проблему AI, а вы сообщения удаляете. ведь, оказывается, чтобы сделать эмулятор мозга — достаточно уметь находить подобие в базе образцов!

"Результаты анализа системой Coverity безопасности и..."
Отправлено Кирилл , 28-Фев-12 17:30 
Да. Но не только. Нужно ещё эту базу образцов составить, т.е. "научить". Сколько там ребёнка ложку учат держать, а читать-писать? Будет ли экономически выгодной система на обучение которой уйдут десятки лет? Сделать "эмулятор мозга" (т.е. саморазвивающуюся адаптивную систему) трудно не логически, для этого вся математика есть, а чисто физически сложно добиться такой плотности связей и такой чувствительности, а значит способности к обучению.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 27-Фев-12 10:43 
> Ну, некоторые люди не просто перед каждым обращением указателю пишут "if (!p)
> return -1" (как это, вероятно, делаете вы)

Не, ну что это за жирный троллинг? Вам не кажется что потоньше троллить надо?!


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено тоже Аноним , 25-Фев-12 17:34 
Возможно, ряд ошибок решался примитивной автозаменой - никто же не сказал, что ошибки были разными.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Ytch , 25-Фев-12 20:13 
> Возможно, ряд ошибок решался примитивной автозаменой - никто же не сказал, что ошибки были разными.

Добавьте к этому, что одно конкретное "плохое" место в коде может "выдавать" десяток ошибок (да еще и совершенно разнородных), так что переписав один кусок (возможно даже небольшой) удается избавиться от пары десятков ошибок разом.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено тоже Аноним , 25-Фев-12 23:06 
Ну, статический анализатор и должен показывать как раз это место, а не те места, где оно используется. Разве что "это место" - шаблон.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 25-Фев-12 23:07 
>> команда разработчиков BRL-CAD устранила более 1600 дефектов в течение 5 дней
> Вот это производительность труда! Они устраняли 40 дефектов в час! Или там
> просто штат очень большой?

Не, там ашипки типа

while (1) {
      for ( i = 0; i > 0; i++);
          if ( i = NULL );
             printf(%d, 3.15159265);
          else
             goto exit();
}

Уже 10 штук :)


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено qux , 25-Фев-12 14:32 
Третье место — неинициализированные переменные. Как оно мимо gcc проходит? Или на выхлоп никто не смотрит, Werror не использует?

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено xxx , 25-Фев-12 17:20 
Видел ли ты что мимо IAR проходит? Там вообще такое ощущение что разработчики компилятора наркоманы и стандарт Си на косяки перевели. У меня теперь в практику вошло, весь код пришедший с IAR прогонять через GCC и Clang'овский статический анализатор. Clang кстати тоже многие интересные моменты замечает, что GCC пропускает.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Ytch , 25-Фев-12 20:27 
> У меня теперь в практику вошло, весь код пришедший с IAR прогонять через
> GCC и Clang'овский статический анализатор. Clang кстати тоже многие интересные моменты
> замечает, что GCC пропускает.

А как вам это удается, если не секрет? Я давненько не имел дел с IAR'овскими компиляторами, но раньше, помню, натравить что-то, кроме IAR, на проект сделанный конкретно под IAR было весьма проблематично в силу огромного числа платформо-специфичных и сильно-iar-специфичных конструкций (а без них iar выдавал такое, что без слез не взглянешь). Любая утилита и/или компилятор спотыкались и отваливались на таких штуках и без суровой правки исходников их нельзя было использовать.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено xxx , 26-Фев-12 01:39 
> А как вам это удается, если не секрет?

Сейчас там в IAR в основном все специфичные вещи запиханы в #pragma, которые GCC тупо игнорирует. Ну или мне пока очень везет=) Мне обычно и не надо, чтобы код с IAR собрался достаточно на warning и error поглядеть. А так да, приходится портировать. Просто весело когда кроме специфичных для компилятора #pragma или ещё чего вылезают вещи которые не совместимы с жизнью и IAR это лихо проглатывает.



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Ytch , 25-Фев-12 20:44 
> Видел ли ты что мимо IAR проходит? Там вообще такое ощущение что
> разработчики компилятора наркоманы и стандарт Си на косяки перевели.

По моему скромному опыту, абсолютный рекордсмен и чемпион в этом сомнительном деле это TI CodeComposer Studio. Включить его в strict-режим невозможно - он прекращает компиляцию найдя более определенного количества ошибок (точно не помню сколько, но много). Ирония в том, что при этом он так и не доходит до ваших файлов - эта тьма ошибок (для strict-режима) уже в их собственных файлах.
Если не включать strict-режим, то он спокойно позволяет использовать, к примеру, функции без прототипа, а что он при этом реально вызывает и как передает параметры - загадка. Самое плохое, что он год будет все компилировать правильно, а потом, когда ты будешь править какие-нибудь незначащие строчки совершенно в другом месте в этой части получишь "биг-бада-бум" с вероятностью 50%. А хватило бы одного warning.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено xxx , 26-Фев-12 02:37 
> По моему скромному опыту, абсолютный рекордсмен и чемпион в этом сомнительном деле
> это TI CodeComposer Studio.

Я уже давно стал полным сторонником того, что проприетарные средства разработки зло полнейшее. Они вечно недопилены и кривы, особенно от производителей чипов. Тот же IAR, не считая компилятора (а он все-таки генерирует достаточно быстрый код, и библиотека Си компактна в отличии от того же newlib), но IDE, как с таким позором можно вообще в 21 веке появляться.

Мне повезло, моя контора не ограничивает средства разработки, поэтому использую самосборный toolchain на GCC и радуюсь.

А вообще это просто беда разработки встраеваемых систем, с одной стороны кривые поделки от производителей чипов и т.д. с другой такие же криворукие разработчики. Приходится иметь дело с недавними выпускниками наших вузов, берут их разрабатывать встроенное ПО. И они могут разбираться во всем, в схемотехнике, физике, но только не в программировании и даже интереса к нему не испытывают. Или наоборот наберут бывших явистов для которых элементарные понятия цифровой схемотехнки и электроники или беззнаковые типы и ограничение в 1Кб памяти - rocket science. Зато все как один в резюме указывают, что знают Си в совершенстве. Они видимо забывают, что знание убогого синтаксиса (хотя в живую встречал только двух человек которые читали стандарт С99) это только 10%, остальное - это знания и умения на этом убожестве прменять современные методики, алгоритмы и сопутствующие инструменты.

Зато пионеры горлопанят: "На Си нельзя писать большие проекты!!!" Это оттого, что их знания Си == 0. А вот зная Си + алгоритмы + различные парадигмы и методики программирования + подходящие средства разработки и умея это все применять, оказывается, что можно запилить проекты масштаба Linux и *BSD.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено VoDA , 26-Фев-12 02:49 
> Или наоборот наберут бывших явистов для которых элементарные понятия
> цифровой схемотехнки и электроники или беззнаковые типы и ограничение в 1Кб
> памяти - rocket science.

Странные джависты, что джаву на С или С++ меняют. Возвожно как джависты не смогли адекватно работать, вот решили что С легче будет. Наивные =)))


PS хорошо отношусь к С и С++ разработчикам, но знаю что это другое множество задач ;)


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Ytch , 27-Фев-12 01:24 
> Мне повезло, моя контора не ограничивает средства разработки, поэтому использую самосборный toolchain на GCC и радуюсь.

У меня, в этом смысле, аналогично. С некоторыми (а может и всеми) "сигнальниками" от Texas Instruments беда как раз в том, что альтернатив практически нет.
Analog Devices в этом смысле поступил гораздо лучше. Под многие семейства есть свободные toolchain и gcc, причем, судя по всему, исходно с некоторой поддержкой самих Analog Devices. Их собственные проприетарные компиляторы по опциям и "нестандартностям" более или менее похожи на gcc (даже в официальной документации к ним есть как минимум один раздел, посвященный сходствам и различиям с gcc).

По поводу "молодых" - ситуация полностью аналогичная. Либо "профильные" ребята, но с программированием туго, либо "программисты", но настолько "объектно-ориентированные" и/или далекие от "железа", что нужны годы, чтоб из оставшихся вышел толк в нашем деле.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 14:00 
> По поводу «молодых» — ситуация полностью аналогичная. Либо «профильные» ребята, но с
> программированием туго, либо «программисты», но настолько «объектно-ориентированные»
> и/или далекие от «железа», что нужны годы, чтоб из оставшихся вышел
> толк в нашем деле.

если бы только у вас так… проблема с нормальными сотрудниками. «— Летать не умеют, стрелять — тоже пока не умеют. Но — орлы!» то есть, денег хотят как орлы, и чтобы при этом их отходы жизнедеятельности считались полезной работой.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 27-Фев-12 10:45 
> это TI CodeComposer Studio. Включить его в strict-режим невозможно - он
> прекращает компиляцию найдя более определенного количества ошибок (точно не помню сколько,
> но много). Ирония в том, что при этом он так и
> не доходит до ваших файлов - эта тьма ошибок (для strict-режима)
> уже в их собственных файлах.

Что ж ты от проприетарщиков то хотел, дяденька?


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 26-Фев-12 05:45 
> Третье место — неинициализированные переменные. Как оно мимо gcc проходит? Или на
> выхлоп никто не смотрит, Werror не использует?


#include <stdio.h>
#include <string.h>

const char *TEXT = "123456789";

int main()
{
  char a;

        if (strlen(TEXT) > 20)
                a = 'A';
        if (strlen(TEXT) < 10)
                printf("%d\n", a);

  return 0;
}

$  gcc -W -Wall -Wextra -Werror -Wunused -Wuninitialized test.c

Молчит тварь :)


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 06:16 
а с чего бы ему вякать, если неинициализированные глобальные статики попадают в BSS, которая по-умолчанию инициализируется нулями? перемести 'a' в main() и убери static — сразу заорёт.

ты как первый раз замужем, честное слово.

p.s. опа, успел код поменять. забавно: a всегда инициализировано, причём значением из первого условия — если собирать с -O2. а если с -O0 — то там как и полагается бредятина. выверты gcc…

и да: молчит, зараза.


"Результаты анализа системой Coverity безопасности и..."
Отправлено pavlinux , 26-Фев-12 06:24 
> перемести 'a' в main() и убери static — сразу заорёт.

А может сразу инициализировать, хрен ли мучатся?!
Есть пример. Рабочий! Глючный! Умнож такую багу
на десяки тыщь строк, и ищи её там...


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 06:25 
а ты тоже сразу отвечать не спеши, у меня волшебная кнопка редактора работает.

"Результаты анализа системой Coverity безопасности и..."
Отправлено Аноним , 27-Фев-12 10:47 
> а ты тоже сразу отвечать не спеши, у меня волшебная кнопка редактора
> работает.

Соревнуетесь кто кого техничнее поднае... редактированием? :)


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 06:26 
p.s. в любом случае за такой код надо тестикулы отрывать.

"Результаты анализа системой Coverity безопасности и..."
Отправлено pavlinux , 26-Фев-12 06:29 
> p.s. в любом случае за такой код надо тестикулы отрывать.

А в таком примере, переменная "a" может уползти далеко,
за 3-4 функции, через 5 файлов,... а если это библиотека,
которую использует другая библиотека, так ваще жо..а.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 06:35 
just don't do that. есть же хорошая практика: изначально присваивать переменной чушь и assert'ить. ну, и assert'ить на предмет соблюдения контрактов, конечно. «и много-много макросов детишкам принесла…»

"Результаты анализа системой Coverity безопасности и..."
Отправлено pavlinux , 26-Фев-12 06:46 
> just don't do that. есть же хорошая практика: изначально присваивать переменной чушь
> и assert'ить. ну, и assert'ить на предмет соблюдения контрактов, конечно. «и
> много-много макросов детишкам принесла…»

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


"Результаты анализа системой Coverity безопасности и..."
Отправлено pavlinux , 26-Фев-12 06:27 
> а с чего бы ему вякать, если неинициализированные глобальные статики попадают в
> BSS, которая по-умолчанию инициализируется нулями? перемести 'a' в main() и убери
> static — сразу заорёт.
> ты как первый раз замужем, честное слово.
> p.s. опа, успел код поменять. забавно: a всегда инициализировано, причём значением из
> первого условия — если собирать с -O2. а если с -O0
> — то там как и полагается бредятина. выверты gcc…
> и да: молчит, зараза.


char *a;

        if (strlen(TEXT) > 20)
                a = "A";
        if (strlen(TEXT) < 10)
                printf("%d\n", ++a);

А вот так SEGFALT словим


"Результаты анализа системой Coverity безопасности и..."
Отправлено qux , 26-Фев-12 13:24 
Тогда или ++(*a), или %p и отсутствие сегфолта, не?
Во втором случае оно еще и ругается уже.

"Результаты анализа системой Coverity безопасности и..."
Отправлено pavlinux , 26-Фев-12 06:33 
> забавно: a всегда инициализировано, причём значением из  первого условия

:)


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Df232z , 26-Фев-12 11:59 
> Третье место — неинициализированные переменные. Как оно мимо gcc проходит? Или на
> выхлоп никто не смотрит, Werror не использует?

Все просто - не инициализированные переменные активно используются.
Есть специальная техника - туннелирование.
Позволяет передавать значения переменных в функцию без дополнительных затрат времени.
Выглядит это вот так:


#include <stdio.h>
void f1(){
  int a = 100;
  a++;
}
void f2(){
  int b; /*!*/
  printf("Sure 101 = %d",b);
}
int main(){
f1();
f2();
}

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

Метод работать то работает, только надежности не прибавляет.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено qux , 26-Фев-12 13:18 
Где оно в ядре, взглянуть можно для интереса? Пытался найти, не получилось, -Wno-uninitialized например только в одном месте, не звук.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Df232z , 26-Фев-12 14:23 
Кому нравятся ругань компилятора?
Правильно - никому.
Так что починим?
Правильно - нет.
Костылик вот наш ответ.
>>linux-3.3-rc5


/*
* A trick to suppress uninitialized variable warning without generating any
* code
*/
#define uninitialized_var(x) x = x

Ну ты понял.
Кстати ответ тем кто считает, что компилятор нам спасет от всех напастей.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:37 
и что это должно продемонстрировать? что компилятор неидеален, и иногда его ворнинги надо насильно затыкать? Кэп, мы в курсе. а просили мы продемонстрировать то, что ты назвал «тунелинг» и на голубом глазу утверждаешь, что в ядре оно «очень активно используется». поскольку ты так уверен — у тебя не должно быть затруднений с приведением хотя бы пары десятков мест, где это используется (хотя для «активно» надо бы сотни как минимум, да уж ладно…)

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено qux , 26-Фев-12 15:01 
Прикольно. Но еще бы передачу между функциями увидеть.

Хотя не понял, как это работает. Если использовать для глобальной переменной, то gcc выдает ошибку "initializer element is not constant". А для автоматической переменной почему не так? Компилит молча с "gcc -O0 -g -Wall -Wextra -pedantic --std=c90".

clang тоже молча собирает (с дефолтными опциями). С --analyze отлавливает.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 27-Фев-12 03:41 
> Где оно в ядре, взглянуть можно для интереса? Пытался найти, не получилось,

Ну вот напрямер http://lxr.linux.no/#linux+v3.2.7/drivers/xen/xen-selfballoo...

На 151-ой строке объявляют и не инициализируют cur_frontswap_pages,
на 155-ой это неясное значение присваивают другой переменной.
на 158-ой идёт сравнение, уже инициализированной, cur_frontswap_pages с
неясным значением у last_frontswap_pages.

Тут и ёжику понятно, что эти две переменные используются
как проверка работы функции frontswap_curr_pages().
То есть, это присваивание однозначно определяет то,
что эти две переменные меж собой равны, даже не инициализируемые вручную.

Но факт присваивания неинициализированной переменно налицо.

Вот Coverity, за подобный такому, шухер, и получает бабло от АНБ,
заказы от корпоративщиков, и орёт на каждом заборе, что они находят баги. :)


static void frontswap_selfshrink(void)
{
        static unsigned long cur_frontswap_pages;
        static unsigned long last_frontswap_pages;
        static unsigned long tgt_frontswap_pages;

        last_frontswap_pages = cur_frontswap_pages;
        cur_frontswap_pages = frontswap_curr_pages();

        if (!cur_frontswap_pages ||
                        (cur_frontswap_pages > last_frontswap_pages)) {
                frontswap_inertia_counter = frontswap_inertia;
                return;
        }
...



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Alex_S , 27-Фев-12 09:58 
>> Где оно в ядре, взглянуть можно для интереса? Пытался найти, не получилось,
> Ну вот напрямер http://lxr.linux.no/#linux+v3.2.7/drivers/xen/xen-selfballoo...
> На 151-ой строке объявляют и не инициализируют cur_frontswap_pages,
>         static unsigned long cur_frontswap_pages;

  эй, а разве static переменные внутри функции не в ноль инициализируютя по умолчанию ?


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 14:06 
>   эй, а разве static переменные внутри функции не в ноль
> инициализируютя по умолчанию ?

а вот кстати не помню. ау, у кого там стандарт под рукой?


"Результаты анализа системой Coverity безопасности и..."
Отправлено qux , 27-Фев-12 16:03 
А кстати да. То есть работать должно нормально, хоть стиль и.. хромает.

If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every member that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Noname , 27-Фев-12 17:36 
>>> Где оно в ядре, взглянуть можно для интереса? Пытался найти, не получилось,
>> Ну вот напрямер http://lxr.linux.no/#linux+v3.2.7/drivers/xen/xen-selfballoo...
>> На 151-ой строке объявляют и не инициализируют cur_frontswap_pages,
>>         static unsigned long cur_frontswap_pages;
>   эй, а разве static переменные внутри функции не в ноль
> инициализируютя по умолчанию ?

Практически везде в 0, но это скорее костыль чем фича. :)


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 14:03 
человек имел в виду совсем другое. он утверждает, что в ядре активно используется хак с неявной передачей локальных переменных через стек. вот мы хотим видеть доказательства сего утверждения. твой пример — он совсем из другой оперы, тут и стек-то не задействован.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 14:09 
на самом деле даже средней тупости оптимизатор понаделает тут мегапроблем. что, кстати, было известно давно, чуть ли не с момента появления оптимизирующих компиляторов.

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


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Xasd , 26-Фев-12 18:07 
> Позволяет передавать значения переменных в функцию без дополнительных затрат времени.
> ...
> Очень активно используется в ядре линукс. ...

если это используется хотябы гдето [я имею ввиду серъёзные проекты, а не на домашней странице Васи Пупкина] -- то я очередной раз очень разочаруюсь в жизни :-(


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 18:12 
> если это используется хотябы гдето

раньше использовалось. тю, сам использовал ещё во времена DOS — даже с разрешёнными прерываниями.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 27-Фев-12 05:45 
> Очень активно используется в ядре линукс.

Ага, щаз, сто тыщь раз...

gcc -fipa-pure-const test.c
./a.out
101=0

-fipa-pure-const входит во флаг -O, а линуховый дефолтный -02

Так что, слово "активно" совсем не уместно.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 14:05 
т-с-с-с. ну что ты всё ломаешь? щаз обидишь его, и он не скажет, какие именно участки ядра надо переделать. а я хотел потом втихаря патчей заслать и выпендриться, сколько багов починил!

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено netch , 28-Фев-12 16:53 
> Все просто - не инициализированные переменные активно используются.
> Есть специальная техника - туннелирование.
> Позволяет передавать значения переменных в функцию без дополнительных затрат времени.

Это должно работать очень ненадёжно.
Gcc любит оптимизацию работы со стеком следующим образом: возврат позиции SP (ESP, RSP - неважно) после каждой функции не делается, а делается только в конце. При нескольких последовательных вызовах позиция SP будет постепенно уползать влево. Это частично отключается в случае вызовов внутри цикла (SP на входе в цикл должен иметь всегда одно и то же значение), но при линейных вызовах позволяет экономить операции.
При такой оптимизации адреса для f1.a и f2.h будут разными, и передача данных не случится.

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

Ну теперь я не удивляюсь тому, как в Linux относятся к звуку.


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 28-Фев-12 17:05 
> Ну теперь я не удивляюсь тому, как в Linux относятся к звуку.

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


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Bizdelnick , 25-Фев-12 14:32 
Перечитал первый абзац 5 раз. Так и не понял, как из 0,45 и 0,64 можно получить в среднем 1.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Pahanivo , 25-Фев-12 15:03 
> Перечитал первый абзац 5 раз. Так и не понял, как из 0,45
> и 0,64 можно получить в среднем 1.

читать надо учится ...
первые два числа взяты в результате тестирования КОНКРЕТНЫХ ПРОДУКТОВ
последнее - ПО ОТРАСЛИ В ЦЕЛОВ


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Антон , 25-Фев-12 15:04 
А запросто. 0.45 и 0.64 -- это усреднение по проектам, а 1.0 -- по всем строкам всех проектов (сказывается вклад низкокачественных проектов с большим числом строк).

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено gegMOPO4 , 25-Фев-12 16:08 
Где пометка «На правах рекламы»?

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 20:45 
> Где пометка «На правах рекламы»?

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


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 25-Фев-12 23:15 
Мы без них потестируем. Пущай код отдают.
А то блин всё проверят, а самое вкусное покажут только ФБР, АНБ и ЦРУ.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Buy , 25-Фев-12 16:19 
> Например, команда разработчиков BRL-CAD устранила более 1600 дефектов в течение 5 дней

Вот я хотел услышать о команде разработчиков ядра линукс :) , но об этом дипломатично промолчали. Значит плохи дела... :))))


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено ананим , 25-Фев-12 16:44 
Зато у проприетастов всё хорошо.
Это хотел сказать?

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено тоже Аноним , 25-Фев-12 17:38 
> Вот я хотел услышать о команде разработчиков ядра линукс

Вы хотели услышать, что в ядре Линукс до сих пор была россыпь ошибок, на устранение каждой из которых в среднем требуется несколько секунд?
Так вот, таких ошибок там не нашлось. Что вас в этом расстраивает?



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 21:19 
"Не нашлось" это синоним "нет вообще"? Тогда почему ежемесячно обновляются ядра, не подскажешь? Или все-таки будем реалистами?

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 21:54 
Еще лучше, еще быстрее!!

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено тоже Аноним , 25-Фев-12 23:11 
Ну, так и будьте реалистом, а не пустословом.
Устранение ошибок отнюдь не означает, что они были такими тривиальными, что их может обнаружить даже компьютер (речь об этом).

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 25-Фев-12 23:11 
> Тогда почему ежемесячно обновляются ядра, не подскажешь?

ChangeLog знает.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 21:13 
Пока писал ответ, тред удалили.

> То есть, Вы таки обвиняете авторов вышеуказанных ядра PHP и Postgre в непрофессионализме?

Фактически, да.
Объясняю подробнее: не все комиттеры в эти проекты обладают нужным уровнем
профессионализма в использовании С/С++. Они могут быть выдающимися учеными (или любителями) в области компиляторов и/или структур данных, и др., но им явно не хватает опыта в использовании языков, на которых они реализуют свои идеи.
Об этом и свидетельствует статистика Coverity.

Может возникнуть вопрос, а как же приобрести этот необходимый опыт, кроме как программируя? - правильно, никак. Но самураям тоже не сразу давали в руки настоящий меч. Нужно было какое-то время потренироваться на деревянных - лучше не подпускать студентов (и к ним приравненных) к таким жизненно важным проектам как ядро, Postgre.
И как тут не вспомнить GSoC...
А PHP вообще сначала расшифровывался как Personal Home Page.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено жабабыдлокодер , 25-Фев-12 21:43 
Положим, студентов никто и не допускает ни до ядра и до СУБД. Там есть специальные люди, которые решают, внести патч или нет. И все патчи проходят контроль - хотя бы на отсутствие закладок. Нет, раз ни авторы, ни те, кто в продукт включал код, не нашли ошибок, значит они крайне неочевидны.
Проблема гораздо глубже.
С появился, как ответ на определенную ситуацию, в точности также, как позднее и С++. Все новые и новые языки придумывают не просто так: многих системных архитекторов уже не устраивают возможности этих языков. Но из-за огромной массы уже написанного и отлаженного кода перейти на D или что-то иное тоже невозможно...
Я думаю, что  разработчикам С/С++ компиляторов нужно делать больший упор на анализ, чтобы такие ошибки можно было отлавливать если не прямо в IDE, то хотя бы на этапе компиляции.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 25-Фев-12 22:24 
> Нет, раз ни авторы, ни те, кто в продукт включал код, не нашли ошибок, значит они крайне неочевидны.

По собственному опыту могу сказать, что в большинстве случаев, т.н. "ревью" кода
другим человеком, не выявляет большинство ошибок в работе этого кода.
(кроме элементарных случаев, типа проверки на NULL).
Т.к. для того, чтобы проверить чужой код от и до, ревьюер должен полностью понять,
что этот код должен делать и как он работает на самом деле. Зачастую, на это нужно еще
больше времени, чем ушло на написание кода у автора. А время, как известно - деньги.
Так что чаще всего, ревьюинг как раз проверками на NULL и ограничивается.

> Я думаю, что  разработчикам С/С++ компиляторов нужно делать больший упор на анализ, чтобы такие ошибки можно было отлавливать если не прямо в IDE, то хотя бы на этапе компиляции.

Согласен. И попытки это сделать уже предпринимаются: например LLVM, уже может сам расставлять
retain/release для Objective-C кода, и показывать прочие чудеса анализа.
И такие проекты как Coverity должны помочь.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено anonymous vulgaris , 27-Фев-12 06:18 
> С появился, как ответ на определенную ситуацию,

Си появился поскольку у авторов было желание запустить убогий простаивающий в углу никому не нужный комп. Лучше бы оно потратили время на выбивание у начальства денег на мейнфрейм с нормальными языками от IBM.

>в точности также, как позднее и С++.

Конечно же совсем не так.

> Я думаю, что  разработчикам С/С++ компиляторов нужно делать больший упор на  анализ, чтобы такие ошибки можно было отлавливать если не прямо в IDE, то хотя бы на этапе компиляции.

Системам статического анализа 100 лет. Посмотрите lint например. Lint first appeared (outside of Bell Labs) in the seventh version (V7) of the Unix operating system in 1979.  Не помогает.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 25-Фев-12 23:22 
http://softwareintegrity.coverity.com/coverity-5-5-webinar-r...

Вот скажите, как вон та песта может быть "... over 15 years of technology marketing experience with expertise in code governance, static analysis and automation"

Тётке, от силы, лет 27-28 ... ну пусть даже  35!!!



"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Карбофос , 25-Фев-12 23:28 
в 12 лет сломала комп у брата. вот как!

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 25-Фев-12 23:31 
это же Director of Product Marketing: они органически неспособны правду говорить.

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Serge , 26-Фев-12 23:26 
чувак, тетке около 45.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 23:28 
> чувак, тетке около 45.

а на вид ягодка. сразу видно — ни для честно не работала, только трудовой люд обманывала.


"Результаты анализа системой Coverity безопасности и..."
Отправлено Sergey722 , 27-Фев-12 13:10 
>а на вид ягодка

ягодка опять


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено pavlinux , 27-Фев-12 03:28 
> чувак, тетке около 45.

Фотошоп рулит!?


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 26-Фев-12 15:46 
Срач java vs Qt и C# vs Qt уже был?

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 15:53 
> Срач java vs Qt и C# vs Qt уже был?

неа, можешь начинать.


"Результаты анализа системой Coverity безопасности и..."
Отправлено Аноним , 26-Фев-12 16:06 
Начинаю. Библиотека Qt - это неплохая поддержка для "голого" С++. Сравнивать C# и java нужно именно с Qt, а не с C++.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 26-Фев-12 16:14 
> Начинаю. Библиотека Qt - это неплохая поддержка для "голого" С++. Сравнивать C#
> и java нужно именно с Qt, а не с C++.

ну и с чем тут спорить? ты что-нибудь провокативное вкидывай.


"Результаты анализа системой Coverity безопасности и..."
Отправлено вкидывают , 27-Фев-12 09:21 
> ну и с чем тут спорить? ты что-нибудь провокативное вкидывай.

"PHP - глобальное и надежное решение для серьёзного бизнеса, а на сипипи пишут лунупсоеды-недоучки за еду"


"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 14:08 
> "PHP - глобальное и надежное решение для серьёзного бизнеса, а на сипипи
> пишут лунупсоеды-недоучки за еду"

уйди, мы тут о Qt!


"Результаты анализа системой Coverity безопасности и..."
Отправлено тоже Аноним , 27-Фев-12 15:49 
Этот вентилятор уже так забросали, что он давно перестал крутиться...


"Результаты анализа системой Coverity безопасности и..."
Отправлено anonimous , 27-Фев-12 12:06 
Сравнивать языки принято с языками. а библиотеки с библиотеками. Выше было.

"Результаты анализа системой Coverity безопасности и..."
Отправлено arisu , 27-Фев-12 14:07 
> Сравнивать языки принято с языками. а библиотеки с библиотеками. Выше было.

ок. тогда от жабы отдираем JVM, а от c# .Net. никак иначе. это — рантаймовые *библиотеки*.


"Результаты анализа системой Coverity безопасности и качества..."
Отправлено stimpack , 28-Фев-12 19:06 
почему не проанализировали plan9? это ж цитадель высокой мысли и идеальных решений, настолько идеальных, что аж сферических. пишут ли там с ошибками? (прости господи меня за такое вольномыслие)

"Результаты анализа системой Coverity безопасности и качества..."
Отправлено Аноним , 03-Мрт-12 01:04 
Иногда такие быстрые исправления ошибок просто пужают.  

Вон, несколько лет назад, valgrind показывал, что в OpenSSL неинициализированная переменная, Debianовцы "исправили" ошибку, и всё было хорошо.  А потом оказалось, что исходные переменные для создания ключей стали прогнозируемы.