> а где ещё есть разыменования пустых указателей и выходы за пределы массивов? ведь в прекрасном Rust, божественном Go и прочих великолепных Java и C# их нет (и даже в старичке Pascal, вроде как надо постараться, чтобы их добиться), вот и остаётся, что вроде как только богомерзкие C/C++.Это NPE/NullRef нет? Да побойтесь бога. Топ1 причина всех багов. Выхода за пределы массива нет, это правда, но не в плюсах, в жабе/шарпах. То есть да, шарпы безопаснее плюсов, а раст безопаснее шарпов.
> По своей epsilon-окрестности могу сказать, что проценты правильные. Начиная с разных ОС, которые пока вроде как, кроме как на C/C++ не написаны (мне известно, про наличие проектов ОС на том-же Rust - вот только не слышно, чтобы они хоть где-то запускались за пределами VirtualBox), разные браузеры (например Chrome).
Мы вроде весь софт сравниваем, а не только ОС. Статистику по ОС я и так знаю.
> встречный вопрос - у Вас есть такая статистика по языкам, было-бы интересно на неё взглянуть.
Увы, собранной в одном месте статистики я не находил, только разрозненные данные по разным языкам. Из недавней статью про переписывание firefox:
Память: 32
Границы: 12
Имплементация: 12
Null: 7
Переполнение стека: 3
Целочисленное переполнение: 2
Другое: 1
Выводы делайте сами.
Кстати, Mozilla целую статью именно на эту тему опубликовала, рекомендую озанкомиться: https://hacks.mozilla.org/2019/02/rewriting-a-browser-compon.../
> Позволю себе с этим не согласиться. Вылеты тоже легко чинить - особенно, если они легко воспроизводятся, выходы за пределы массивов - сложнее, но тоже есть методы, особенно если опять-же ситуация может воспроизводиться.
В сефрическом коде в вакууме вся программа это чистая функция от входа, и чтобы воспроизвести баг достаточно подать тот же вход.
В менее сферическом коде, если он написан не на коленке, логи всегда помогут добиться воспроизведения. Потому что это ошибка логики. Другое дело, когда ошибка связана со случайным мусором, который от запуска к запуску разнится.