Nowe standardy bezpieczeństwa w C++ – Stroustrup chce zachować konkurencyjność języka

Nowe standardy bezpieczeństwa w C++ – Stroustrup chce zachować konkurencyjność języka

Bjarne Stroustrup, twórca języka C++, wezwał komitet WG21, odpowiedzialny za rozwój standardów C++, do podjęcia działań mających na celu utrzymanie konkurencyjności języka w kontekście rosnącej popularności języków zapewniających bezpieczne zarządzanie pamięcią. Według niego C++ już teraz oferuje wszystkie mechanizmy potrzebne do bezpieczeństwa pamięci, ale brakuje standaryzowanych narzędzi, które gwarantowałyby programowanie wyłącznie w bezpiecznym podzbiorze języka.

Presja na języki z bezpiecznym zarządzaniem pamięcią

Zdaniem Stroustrupa czas na działanie jest ograniczony. Do 2026 roku producenci oprogramowania powinni przedstawić plan wdrożenia technologii minimalizujących ryzyko błędów pamięciowych lub przejścia na języki, które natywnie oferują takie zabezpieczenia. Zalecenie to pochodzi od amerykańskiej Agencji ds. Cyberbezpieczeństwa i Infrastruktury (CISA) oraz FBI, które intensyfikują działania na rzecz zwiększenia bezpieczeństwa kodu.

Stroustrup podkreśla, że standaryzacja narzędzi ułatwiających bezpieczne programowanie w C++ pozwoli zachować zainteresowanie językiem, szczególnie wśród programistów korzystających obecnie z C i C++, którzy w przeciwnym razie mogliby zostać zmuszeni do migracji na inne technologie. Dzięki temu projekty w języku C mogłyby zostać stopniowo przeniesione do C++, a następnie przekształcone na bezpieczne konstrukcje zgodnie z wytycznymi C++ Core Guidelines.

Standardowe profile bezpieczeństwa dla C++

Aby poprawić bezpieczeństwo kodu, Stroustrup proponuje wprowadzenie systemu profili C++, które nakładałyby dodatkowe wymagania na kod źródłowy. Mechanizm ten byłby podobny do używania flag "-Wall" i "-Wextra", lecz zamiast ostrzeżeń, blokowałby kompilację kodu niespełniającego określonych zasad.

Przykłady profili, które mogłyby zostać wdrożone:

  • type – wymaga inicjalizacji każdego obiektu, zabrania rzutowania typów.
  • lifetime – blokuje odwołania do zwolnionej pamięci, operacje na surowych wskaźnikach i jawne użycie new/delete.
  • bounds – wymaga sprawdzania zakresów dla wskaźników, zabrania operacji arytmetycznych na wskaźnikach.
  • arithmetic – uniemożliwia przepełnienia liczb całkowitych i niebezpieczne konwersje między typami.
  • concurrency – eliminuje operacje prowadzące do zakleszczeń i wyścigów danych.
  • RAII (Resource Acquisition Is Initialization) – wymaga ścisłego zarządzania zasobami.

Profile mogłyby być stosowane na poziomie projektu, plików lub nawet poszczególnych konstrukcji kodu. Przykładowo:

  • [[profile::enforce(type)]] – wymusza stosowanie bezpiecznych typów w całym pliku.
  • [profile::suppress(lifetime)] this->succ = this->succ->succ; – wyłącza kontrolę nad czasem życia obiektów w danym fragmencie kodu.

Bezpieczny kod w C++ zamiast migracji do innych języków

Zastosowanie profili pozwoliłoby na stopniowe eliminowanie niebezpiecznych praktyk w kodzie, takich jak surowe wskaźniki, rzutowania typów czy niejawne odwołania do nieinicjalizowanych obiektów. Przykładowo, zamiast surowych wskaźników można by stosować std::unique_ptr i std::shared_ptr, a klasyczne iteracje po tablicach zastępować zakresową pętlą for (type variable : vector).

Główne gwarancje bezpieczeństwa, które miałyby wynikać z nowych profili:

  • Każdy obiekt jest poprawnie zainicjalizowany i zwolniony.
  • Każdy wskaźnik wskazuje na poprawny obiekt lub ma wartość null.
  • Każda operacja na wskaźnikach i indeksach tablic odbywa się w dozwolonym zakresie.

Propozycja Stroustrupa to próba ratowania pozycji C++ w obliczu presji na migrację do języków z bezpiecznym zarządzaniem pamięcią.

Czy komitet WG21 zdecyduje się na tak radykalny krok?

Avatar
Mar 26, 2024

Nvidia pierwszą firmą z cyfrowym CEO ze sztuczną inteligencją

Powodem, dla którego Nvidia będzie pierwsza jest to, że ma największą potrzebę zachowania korzyści, jakie czerpie od swojego założyciela, Jensena Huanga. Ponadto Huang jest zwolennikiem sztucznej inteligencji, co oznacza, że Nvidia nie tylko jest liderem w dziedzinie rozwiązań AI, ale także wykorzystuje AI wewnętrznie.
0
Mar 16, 2025

NVIDIA pokazała 3 gry action działające z prędkością nawet do 500 klatek na sekundę

Firma NVIDIA zaprezentowała trzy wyczekiwane gry action podczas konferencji GDC 2025, które mogą osiągnąć niezwykle wysoką liczbę klatek na sekundę dzięki technologii DLSS 4 Multi Frame Generation. Są to: Lost Soul Aside, Stellar Blade oraz Tides of Annihilation – wszystkie stworzone przez azjatyckich deweloperów.
0
Oct 18, 2022

Microsoft planuje zwolnienia pracowników

Microsoft odmówił podania, ile miejsc pracy zostało zlikwidowanych, ale źródło podało, że liczba zwolnień wynosiła poniżej 1000.
0

This site uses cookies to offer you a better browsing experience.

Find out more on how we use cookies and how to change cookie preferences in our Cookies Policy.

Customize
Save Accept all cookies