Bjarne Stroustrup, C++ keele looja, avaldas vastuväiteid NSA aruande järeldustele, milles soovitati organisatsioonidel vältida selliste programmeerimiskeelte nagu C ja C++ kasutamist, mis lasevad mäluhalduse arendajate hooleks, ning eelistada keeli nagu C#, Go, Java, Ruby, Rust ja Swift, mis tagavad automaatse mäluhalduse või teostavad mäluohutuse kontrolli kompileerimise ajal.
Stroustrupi arvates ei ületa aruandes mainitud ohutud keeled C++-d tegelikes rakendustes, mis on tema arvates olulised. Eelkõige katavad viimastel aastatel välja töötatud C++ põhinäitajad ohutu programmeerimise meetodid ja ette näevad vahendite kasutamist, mis tagavad ohutuse tüüpide ja ressursside osas. Samas jääb arendajatele, kellele ei ole vajalikud sellised ranged ohutuse tagatised, võimalus jätkata vanade arendusmeetodite kasutamist.
Stroustrup arvab, et hea staatiline analüsaator, mis vastab C++ Core Guidelines'i soovitustele, suudab pakkuda vajalikke C++ koodi turvalisuse garantiiid, nõudes oluliselt vähem ressursse kui uusetele turvalistele programmeerimiskeeltele üleminek. Näiteks on enamik Core Guidelines'i soovitusi juba rakendatud staatilises analüsaatoris ja Microsoft Visual Studio turvalise mäluhalduse profiilis. Osa soovitustest on samuti arvesse võetud Clang tidy staatilises analüsaatoris.
Kriitika objektiks on samuti ANB aruande rõhuasetus vaid mäluhalduse probleemidele, jättes tähelepanuta paljusid teisi programmeerimiskeelte probleeme, mis mõjutavad turvalisust ja usaldusväärsust. Stroustrup käsitleb turvalisust kui laiemat mõistet, mille erinevaid aspekte saab saavutada koodi kirjutamise stiili, teekide ja staatiliste analüsaatorite kombinatsiooniga. Ressursside ja tüüpide turvalisuse tagamise reeglite sissetoomiseks on soovitatav kasutada koodis annotatsioone ja kompilaatori valikuid.
Rakendustes, kus tootlikkus on tähtsam kui turvalisus, võimaldab selline lähenemine rakendada turvameetmeid valikuliselt ainult seal, kus see on vajalik. Turvalisuse tõstmise tööriistu saab samuti osaliselt rakendada, näiteks alguses piirduda vahemike ja initsialiseerimise kontrolli reeglitega ning seejärel järk-järgult kohandada koodi rangemate nõudmiste jaoks.
Allikas: opennet.ru
