Ustvarjalec C++ je kritiziral vsiljevanje varnih programskih jezikov

Bjarne Stroustrup, ustvarjalec jezika C++, je objavil ugovore na zaključke poročila NSA, ki priporoča organizacijam, da se odmaknejo od programskih jezikov, kot sta C in C++, ki upravljanje pomnilnika prepuščajo razvijalcem, v korist jezikov ​​kot so C#, Go, Java, Ruby, Rust in Swift, ki zagotavljajo samodejno upravljanje pomnilnika ali izvajajo varnostne preglede pomnilnika med prevajanjem.

Po mnenju Stroustrupa varni jeziki, omenjeni v poročilu NSA, dejansko niso boljši od C++ v aplikacijah, ki so pomembne z njegovega vidika. Predvsem osnovna priporočila za uporabo C++ (C++ Core Guidelines), razvita v zadnjih letih, zajemajo varne načine programiranja in predpisujejo uporabo orodij, ki zagotavljajo varno delo s tipi in viri. To pušča možnost razvijalcem, ki ne potrebujejo tako strogih varnostnih jamstev, da še naprej uporabljajo stare razvojne metode.

Stroustrup verjame, da lahko dober statični analizator, ki sledi osnovnim smernicam C++, zagotovi potrebna jamstva za varnost kode C++ po bistveno nižji ceni kot prehod na nove varne programske jezike. Na primer, večina osnovnih smernic je že implementiranih v statični analizator in varnostni profil pomnilnika, vključen v Microsoft Visual Studio. Nekatera priporočila so upoštevana tudi pri statičnem analizatorju Clang tidy.

Poročilo NSA je bilo tudi kritizirano, ker se osredotoča samo na težave s pomnilnikom, izpušča pa številne druge težave s programskim jezikom, ki vplivajo na varnost in zanesljivost. Stroustrup vidi varnost kot širši koncept, katerega različne vidike je mogoče doseči s kombinacijo sloga kodiranja, knjižnic in statičnih analizatorjev. Za nadzor vključitve pravil, ki zagotavljajo varnost dela s tipi in viri, je predlagana uporaba opomb v kodi in možnostih prevajalnika.

V aplikacijah, kjer je zmogljivost pomembnejša od varnosti, ta pristop omogoča selektivno uporabo funkcij, ki zagotavljajo varnost samo tam, kjer je potrebna. Varnostna orodja je mogoče uporabiti tudi postopoma, na primer začeti s preverjanjem obsega in pravili inicializacije ter nato postopoma prilagajati kodo strožjim zahtevam.

Vir: opennet.ru

Dodaj komentar