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
Jun 19

Google testuje możliwość przesyłania filmów do analizy w aplikacji Gemini

Użytkownicy aplikacji Gemini mogą już nie tylko przesyłać dokumenty i obrazy, ale również własne pliki wideo. Sztuczna inteligencja od Google potrafi je przeanalizować, streścić lub odpowiedzieć na konkretne pytania dotyczące ich treści.
0
Jul 31

Microsoft wyprzedza Google i Apple – kapitalizacja przekracza 4 biliony dolarów

Microsoft osiągnął kapitalizację rynkową przekraczającą 4 biliony dolarów po zakończeniu notowań 30 lipca. Skok o 8% w handlu posesyjnym nastąpił po publikacji wyników kwartalnych lepszych od oczekiwań i ujawnieniu danych o przychodach z usług chmurowych Azure.
0
Aug 4

Epic Games ponownie wygrywa z Google w sądzie – Android czeka przełomowa zmiana

Sąd Apelacyjny Dziewiątego Okręgu w USA podtrzymał jednogłośny werdykt ławy przysięgłych z 25 roku w sprawie Epic Games przeciwko Google, uznając Google Play Store i system płatności Google za nielegalne monopole. Decyzja przywraca działanie stałego zakazu, który zmusi Google do otwarcia Androida na konkurencyjne sklepy z aplikacjami,
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