Автор C++ розкритикував нав'язування безпечних мов програмування

Б'єрн Страуструп (Bjarne Stroustrup), творець мови 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

Додати коментар або відгук