Bjarne Stroustrup, tvůrce jazyka C++, publikoval námitky proti závěrům uvedeným ve zprávě NSA, ve které bylo organizacím doporučeno přejít od používání programovacích jazyků, jako jsou C a C++, které přesouvají správu paměti na vývojáře, ve prospěch jazyků, jako jsou C#, Go, Java, Ruby, Rust a Swift, poskytujících automatickou správu paměti nebo provádějících kontroly bezpečné práce s pamětí během kompilace.
Podle Stroustrupa zmíněné v zprávě NSA bezpečné jazyky ve skutečnosti nepřevyšují C++ v důležitých aplikacích z jeho pohledu. Zejména se v posledních letech vyvíjejí základní doporučení pro používání C++ (C++ Core Guidelines), která zahrnují metody bezpečného programování a předepisují použití prostředků zaručujících bezpečnou práci s typy a zdroji. Přitom vývojářům, kteří nepotřebují takové přísné záruky bezpečnosti, zůstává možnost pokračovat v používání starých metod vývoje.
Stroustrup se domnívá, že dobrý statický analytik splňující doporučení C++ Core Guidelines může zajistit potřebné záruky bezpečnosti C++ kódu s použitím výrazně nižších nákladů než přechod na nové bezpečné programovací jazyky. Například většina doporučení Core Guidelines byla již implementována ve statickém analytiku a profilu bezpečné práce s pamětí obsaženém v Microsoft Visual Studio. Některá doporučení jsou také zohledněna v statickém analytiku Clang tidy.
Objektem kritiky se také stalo zaměření zprávy NSA pouze na problémy s prací s pamětí, přičemž přehlédlo mnoho dalších problémů programovacích jazyků, které ovlivňují bezpečnost a spolehlivost. Stroustrup považuje bezpečnost za širší pojem, jehož různé aspekty mohou být dosaženy kombinací stylu psaní kódu, knihoven a statických analytiků. Pro řízení začleňování pravidel zajišťujících bezpečnou práci s typy a zdroji se doporučuje používat anotace v kódu a možnosti kompilátorů.
V aplikacích, kde je výkon důležitější než bezpečnost, tento přístup umožňuje selektivní použití prostředků, které zajišťují bezpečnost pouze tam, kde je to nezbytné. Nástroje pro zvýšení bezpečnosti lze také používat částečně, například na začátku se omezit na pravidla pro kontrolu rozsahů a inicializaci, a poté postupně přizpůsobovat kód přísnějším požadavkům.
Zdroj: opennet.ru
