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 11

Google usunął rozszerzenie uBlock Origin z Chrome Web Store

Na stronie rozszerzenia uBlock Origin w Chrome Web Store dezaktywowano przycisk instalacji i umieszczono ostrzeżenie: „Rozszerzenie nie jest już dostępne, ponieważ nie spełnia wytycznych dotyczących rozwoju rozszerzeń dla Chrome”.
0
Sie 26

Google wprowadza obowiązkową weryfikację deweloperów aplikacji na Androida od 2026 roku

Od 2026 roku instalacja aplikacji na certyfikowanych urządzeniach z Androidem będzie możliwa wyłącznie wtedy, gdy ich twórcy przejdą oficjalną weryfikację dewelopera. Zmiana obejmie nie tylko aplikacje pobierane z Google Play, ale także wszystkie programy instalowane z plików APK, tzw. sideloading.
0
Mar 13

Lip-Bu Tan obejmie stanowisko dyrektora generalnego Intela

Intel ogłosił nominację Lip-Bu Tana na stanowisko dyrektora generalnego, co ma na celu ustabilizowanie sytuacji po rezygnacji Pata Gelsingera. Tan obejmie nowe obowiązki 18 marca i ponownie dołączy do rady dyrektorów Intela po wcześniejszej rezygnacji z tego stanowiska w sierpniu ubiegłego roku.
0

Ta strona używa plików cookie, aby zapewnić Ci lepsze wrażenia podczas przeglądania.

Dowiedz się więcej o tym, jak używamy plików cookie i jak zmienić preferencje dotyczące plików cookie w naszej Polityka plików cookie.

Zmień ustawienia
Zapisz Akceptuj wszystkie cookies