LINUX.ORG.RU

Единорог бежал, хвостиком махнул, и из открытого проекта Mono 167 ошибок высыпалось

 , , , ,


0

2

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

В этот раз Сергей проверил с помощью анализатора PVS-Studio проект Mono. Это проект по созданию полноценного воплощения системы .NET Framework. Реализации Mono существуют для следующих операционных систем: Windows, Linux, Solaris, FreeBSD и так далее. Думаю, не все знают, что Mono написан на языке C#. Это несколько необычно для Linux-мира.

Исходный код Mono доступен для загрузки в репозитории на GitHub. Количество строк кода при проверке загруженного с GitHub репозитория составило около 6.3 миллионов (исключая пустые строки). Соответственно и ошибок в такой огромной кодовой базе превеликое множество. Проверив кое-как проект (почему, станет ясно из статьи), Сергей насчитал 167 ошибок, о которых и рассказал.

Приглашаю всех желающих ознакомиться с длинной статьёй. Из неё станет понятно, что C# не сильно безопасней C++ и позволяет делать все те же опечатки и ляпы. И конечно, статья должна в очередной раз продемонстрировать, какую пользу может приносить статический анализа кода. Например, предлагаю всем скачать и попробовать PVS-Studio для проверки своих C# проектов (ну или C, C++).

С уважением, Андрей Карпов. И не забываем подписывать девушек и жён на наш инстаграм pvsstudio. Пусть к программированию приобщаются.

Статья: ищем ошибки в Mono: сотни их...

Перемещено Aceler из opensource

Пишите на Rust и вам не придется использовать стат. анализаторы для всяких говноязыков типа C++. И да - C# гораздо безопаснее и лучше уродливых крестов.

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

а чо руст защитит от копипасты и логических ошибок типа поставить равно там, где нужно неравно? И да. Серво, который обещали к 1 версии раста — непригодное ни для чего говно, отличный показатель ящитаю.

anonymous ()

это уже как полет/фотки/... (на) Марс(а)
типо «ну, ОК»

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

Приличные языки хотя бы не подталкивают к ошибкам типа «if (a = b)».

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

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

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

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

Видимо К&R дураки, ага.

ioway ()

Почему бы вам не нанять себе нормального пиарщика вместо Петросяна?

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

Тю, ну ты и сравнил. Фотки с Марса явно полезнее

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

А чем плоха возможность присвоения в условиях? Это очень удобно, только надо иметь руки прямые.

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

А чем плоха возможность присвоения в условиях?

Если там создаётся новая переменная - ничем.

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

А если не создается? Чем плох пример ниже?

if(error_code = do_somthing())
{
    //Check fail reason
    switch(error_code)
    {
    //...
    }
}

Хотя тут было бы наглядней (и очевидней, что не опечатка) что-то типа такого:

if(0 != (error_code = do_somthing()))

RiseOfDeath ★★★★ ()
Последнее исправление: RiseOfDeath (всего исправлений: 3)
Ответ на: комментарий от Sorcerer

Полагаю, текущее соотношение затрат и выручки их более чем устраивает.

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

конкретно в случае error — может быть и не плохо, но это частный случай

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

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

А для общих случаев есть велосипеды библиотеки и фреймворки.

RiseOfDeath ★★★★ ()
Последнее исправление: RiseOfDeath (всего исправлений: 3)
Ответ на: комментарий от RiseOfDeath

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

В общем, пример плох тем, что это С/С++ и его уже не исправить, а сам код нормальный, насколько это возможно с учетом вышесказанного.

red75prim ★★ ()

Думаю, не все знают, что Mono написан на языке C#

Думаю, не все знают, что 2+2=4. Думаю, не все знают, что Каспийское море — это озеро. Думаю, не все знают, что Капитан Очевидность — это не звание, а погоняло супергероя.

redgremlin ★★★★★ ()

Подзадолбал пиар ваш

anonymous ()

Люди, просто посмотрите как этот московский хапуга Карпов пытается унижать людей, ставящих под сомнение обоснованность цены прослушивания докладов с конференции по Си++ в Новосибирске в комментариях к статье . И не из-за его ли жадности видео с докладов до сих пор нет? Кто-нибудь ещё желает сотрудничать с этим хапугой Карповым? Из своих жизненных наблюдений добавлю, что пренебрежение к простым людям ещё никого до добра не доводило и душевно неразвитый, гнилой руководитель развалит даже самое успешное предприятие. Скорее бы уже разорилась ваша контора. Ждём с нетерпением.

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

Идите работать уже. Глядишь и деньги появятся.

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

Ну я там был

1) Причем тут вообще Карпов? От PVS там два единорога пришло, и был у них один доклад на один час. Интересно весьма, но не они там главные.

2) Сами презентации (слайды) есть в открытом доступе. Видео нет - не потому что жадность, а просто лень, вроде кто-то хотел обработать материал и выложить, но не уверен.

3) Если так уж охота, то идешь на тытрубу и там набираешь 'c++ russia 2016', это другое мероприятие, я бы сказал поинтереснее.

fornlr ★★★★★ ()

Единорог бежал, хвостиком махнул...

И под 32 бита не запустился.

deep-purple ★★★★★ ()

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

Одинаковые подвыражения в пределах одного выражения
В пределах выражения дважды встречается подвыражение c != '<'. Наверное, просто лишнее сравнение.
Одинаковые условия в конструкции 'else if'
Возвращаемое значение метода не используется
Вот он, злосчастный тернарный оператор:
Использование счетчика другого цикла
Проверка не той ссылки на null после приведения с использованием оператора as
Безусловный выброс исключения
Подозрительные операторы 'if'
ля решения проблемы можно, например, перенести проверку на неравенство null выше по коду, или использовать null-условный оператор ('?.'), доступный в C# 6.0.
Избыточная проверка
Форматирование кода, не соответствующее логике
Неверная инициализация статических членов

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

nikolnik ★★★ ()

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

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

Идите работать уже. Глядишь и деньги появятся.

Если мужчины будут брать в жёны женщин исключительно из своей деревни, то рано или поздно род выродится. Тоже самое произойдёт с платными конференциями - народ тупо прекратит туда ходить. Это уже происходит, например, с «Хайлоадом». Если же распространять халяву, тогда будет свежий приток мыслей, бесплатных советов друзей и самого ценного, что может получить предприятие.

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

Причем тут вообще Карпов?

Тогда как ты объяснишь то, что с прошедших бесплатных собраний крестовиков, например, с Нижнего Новгорода или с Иннополиса, где не было этого хапуги, видео с докладов выложены?

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

Я тоже так полагаю. Но если б у них был нормальный пиарщик, то контора по крайней мере на первый взгляд не воспринималась бы как «рога и копыта» с сотрудниками-рабами.

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

Если ты специально делаешь в своем коде на плюсах конструкции вроде «if (a = b)» то тебе нужно сломать руки молотком.

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

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

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

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

Говорят, что отрицательного PR-а не бывает. Раз мы таки обсуждаем их творение, значит PR работает.

Другое дело, что у меня лично возникает недоумение: вроде как их анализатор — штука серьезная и ошибки круто ищет, но вот как они этого умудрились достичь, если у них в остальном какая-то кустарщина?

eao197 ★★★★★ ()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от RiseOfDeath

это очень удобно

Скажите, а где учат писать такие удобные алгоритмы? А то я что-то отстал. И как это, кстати, на блок-схеме нарисовать?

Shadow ★★★★★ ()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Vit

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

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

Для примера можно вспомнить AdWords. Ну не работает оно для нашей сферы. Мы потратили сотни тысяч рублей на эксперименты с AdWords и возможно потратим ещё, но пока не работало и не работает. Вы скажите, «вы не умеете их готовить». Не спорю. Но у нас помимо собственных экспериментов было несколько заходов с разными людьми, которые говорили «что все до них не умели, а вот они-то сейчас ого-го!». Но каждый раз чудо не происходит.

Или скажем, баннерная реклама на Codeproject. Все программисты знают про Adblock. Как результат, один клик по баннеру обходится в $10. Не скачивание, а просто клик. А ведь только 1 из 50-100 скачает, потом только один из 50-100 скачавших купит... Тут никакая арифметика не сходится.

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

Ничего удивительного. Люди способны работать даже в нечеловеческих условиях.

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

А всё от того, что моно писали в те времена и на тех платформах, где решарпера и близко не было. И студии на было.

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

Хотя тут было бы наглядней (и очевидней, что не опечатка) что-то типа такого:

Лучше if ((error_code = do_something()) или if ((error_code = do_something()) != 0).

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

Говорят, что отрицательного PR-а не бывает. Раз мы таки обсуждаем их творение, значит PR работает.

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

anonymous ()

Я за бан унылой джинсы с причиной «джинса»:)

slackwarrior ★★★★★ ()

Дойдет ли тема до второй страницы?

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

унылые говнопостинги Карпова

Ну намного интереснее чем 'очередной раз в раче что-то отвалилось', 'плазма не падает, говорили они', 'в Играх Пронов последняя серия просто невероятна', 'посоветуйте японских порномульиков'...

Ну кому как...

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

Однако определенную пользу опенсорсу pvs приносит, см список http://www.viva64.com/en/inspections/

Этого вполне достаточно, чтобы относиться к pr-потугам Карпова с определенной толерантностью, ясчитаю.

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

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

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

Однако определенную пользу

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

Этого вполне достаточно

Кому-то достаточно, кому-то нет. С моей точки зрения поисходящее напоминает сериал о затяжном маразме.

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

Точно и конкретно в граммах пожалуйста.

Collected Errors:
10358
Checked Projects:
267

С моей точки зрения поисходящее напоминает сериал о затяжном маразме.

Для нас важно то, что сериал сопровождается улучшением ключевых опенсорсных проектов.

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.