Twórca C++ skrytykował narzucanie bezpiecznych języków programowania

Bjarne Stroustrup, twórca języka C++, opublikował zastrzeżenia do wniosków raportu NSA, który zalecał organizacjom odejście od używania języków programowania takich jak C i C++, które pozostawiają zarządzanie pamięcią programiście, na rzecz języków takich jak C#, Go, Java, Ruby, Rust i Swift, które zapewniają automatyczne zarządzanie pamięcią lub przeprowadzają kontrole bezpieczeństwa pamięci w czasie kompilacji.

Według Stroustrupa bezpieczne języki wymienione w raporcie NSA de facto nie przewyższają C++ w ważnych z jego punktu widzenia aplikacjach. W szczególności opracowane w ostatnich latach podstawowe zalecenia dotyczące stosowania C++ (C++ Core Guidelines) dotyczą bezpiecznych metod programowania i zalecają stosowanie narzędzi gwarantujących bezpieczną pracę z typami i zasobami. Daje to programistom, którzy nie wymagają tak rygorystycznych gwarancji bezpieczeństwa, możliwość dalszego korzystania ze starych metod programowania.

Stroustrup wierzy, że dobry analizator statyczny zgodny z podstawowymi wytycznymi C++ może zapewnić niezbędne gwarancje bezpieczeństwa kodu C++ przy znacznie niższych kosztach niż migracja do nowych, bezpiecznych języków programowania. Na przykład większość podstawowych wytycznych została już zaimplementowana w analizatorze statycznym i profilu bezpieczeństwa pamięci zawartym w programie Microsoft Visual Studio. Niektóre zalecenia są również brane pod uwagę w analizatorze statycznym Clang tidy.

Raport NSA był również krytykowany za skupienie się wyłącznie na problemach z pamięcią, pomijając wiele innych problemów związanych z językiem programowania, które wpływają na bezpieczeństwo i niezawodność. Stroustrup postrzega bezpieczeństwo jako szerszą koncepcję, której różne aspekty można osiągnąć poprzez połączenie stylu kodowania, bibliotek i analizatorów statycznych. Aby kontrolować włączenie reguł zapewniających bezpieczeństwo pracy z typami i zasobami, proponuje się użycie adnotacji w kodzie i opcjach kompilatora.

W aplikacjach, gdzie wydajność jest ważniejsza niż bezpieczeństwo, podejście to pozwala na selektywne zastosowanie funkcji gwarantujących bezpieczeństwo tylko tam, gdzie jest ono potrzebne. Narzędzia zabezpieczające można również stosować fragmentarycznie, na przykład zaczynając od sprawdzania zakresu i reguł inicjalizacji, a następnie stopniowo dostosowując kod do bardziej rygorystycznych wymagań.

Źródło: opennet.ru

Dodaj komentarz