Бйорн Страуструп (Bjarne Stroustrup), създателят на езика C++, публикува възражения срещу изводите, направени в доклада на АНБ, в който на организациите се препоръчва да се откажат от използването на програмни езици като C и C++, които прехвърлят управлението на паметта на разработчика, в полза на езици като C#, Go, Java, Ruby, Rust и Swift, предоставящи автоматично управление на паметта или извършващи проверки за безопасна работа с паметта по време на компилация.
Според Страуструп споменатите в доклада на АНБ безопасни езици всъщност не надвишават C++ в важни приложения от неговата гледна точка. В частност, разработените последните години основни насоки за използване на C++ (C++ Core Guidelines) обхващат методи за безопасно програмиране и предписват приложение на средства, гарантиращи безопасна работа с типове и ресурси. В същото време разработчиците, които не се нуждаят от такива строги гаранции за безопасност, остават с възможността да продължат да използват старите методи на разработка.
Страуструп смята, че добър статичен анализатор, съобразен с насоките на C++ Core Guidelines, може да осигури необходимите гаранции за безопасност на C++ кода, изисквайки значително по-малко разходи от преминаването към нови безопасни програмни езици. Например, повечето препоръки от Core Guidelines вече са реализирани в статичния анализатор и профила за безопасна работа с паметта в Microsoft Visual Studio. Част от препоръките също са взети предвид в статичния анализатор Clang tidy.
Обект на критика стана и акцентът в доклада на АНБ само върху проблемите с управлението на паметта, оставяйки без внимание много други проблеми на програмните езици, които влияят на безопасността и надеждността. Страуструп разглежда безопасността като по-широко понятие, различните аспекти на което могат да бъдат достигнати чрез комбинация от стил на писане на код, библиотеки и статични анализатори. За управлението на включването на правила, осигуряващи безопасна работа с типове и ресурси, се предлага да се използват анотации в кода и опции на компилаторите.
В приложения, в които производителността е по-важна от безопасността, този подход дава възможност за изборно приложение на средства, които гарантират безопасност само там, където е необходимо. Инструменти за повишаване на безопасността също могат да се използват частично, например, в началото да се ограничат до правила за проверка на диапазони и инициализация, а след това постепенно да се адаптира кодът към по-строги изисквания.
Източник: opennet.ru
