Powrót do strony głównej

Ewolucja C++: epoki i standardy

Artykuł proponuje mechanizmy dla długoterminowego rozwoju C++: technical specifications dla realistycznych standardów, epoki dla mieszanej kompatybilności i zero-cost wyjątki. To pozwoli językowi ewoluować bez ciężaru legacy.

C++ przyszłości: epoki, TS i nowe wyjątki
Advertisement 728x90

Propozycje ewolucji C++: epoki, realistyczne standardy i nowe wyjątki

Programiści C++ napotykają trzy wersje języka: opisaną w standardzie, ale niedostępną; eksperymentalną w najnowszych kompilatorach; oraz rzeczywistą — w używanych wersjach. To tworzy lukę między teorią a praktyką. Proponuje się zmianę modelu: po zatwierdzeniu propozycji przekształcać ją w specyfikację techniczną dla implementacji przez kompilatory. Włączenie do standardu następuje dopiero po wsparciu w dwóch kompilatorach.

Taki schemat ujawnia problemy na etapie implementacji, pozwala na korekty bez zmiany standardu i gwarantuje obecność funkcji w kompilatorach w momencie wydania standardu. Eksperymentatorzy otrzymują dostęp do nowości zaraz po ich pojawieniu się w gcc lub clang.

Mechanizm epok: rezygnacja z kompatybilności z kodem legacy

Wprowadzenie 'epok' na początku pliku .cpp wskaże wersję C++ dla tego modułu. To umożliwi oczyszczenie języka z nagromadzonego przez dziesięciolecia 'bałaganu': automatycznych konwersji typów numerycznych, porównań signed/unsigned, niejawnych konwersji tablic na wskaźniki, wielu sposobów inicjalizacji.

Google AdInline article slot

Kluczowe zalety:

  • Mieszana kompilacja plików różnych epok w jednym projekcie bez przepisywania kodu legacy.
  • Możliwość transpilacji nowego kodu do starego standardu dla zachowania ABI.
  • Rozwój 'ulepszonego' C++ bez oglądania się na kompatybilność z C.

Epoki zapobiegną przekształceniu języka w potwora pod ciężarem historycznych artefaktów.

Przemyślenie wyjątków w C++

Wyjątki w C++ to fiasko lat 80-tych: kosztowne, nieprzewidywalne, zakazane w połowie projektów. Alternatywy jak std::expected nie rozwiązują problemu niezawodności. Potrzebne są zero-cost wyjątki, zintegrowane z epokami: nowe — tylko w plikach świeżych epok.

Google AdInline article slot

Problemy integracji starego i nowego kodu wymagają rozwiązań, ale status quo jest niedopuszczalny. Podział społeczności na 'z wyjątkami' i 'bez' hamuje rozwój.

Co jest ważne

  • Standard powinien ustalać zaimplementowane funkcje, a nie wyprzedzać rzeczywistość poprzez specyfikacje techniczne.
  • Epoki pozwolą łączyć kod legacy i współczesny, oczyszczając nowy z historycznych błędów.
  • Nowe wyjątki (zero-cost) integrują się według epok, minimalizując obciążenie i zwiększając przewidywalność.
  • Bez tych zmian C++ ryzykuje powtórzenie losu PL/1: wzrost złożoności bez korzyści.
  • Komitet skupia się na mechanizmach strategicznych, a nie taktycznych szczegółach.

Podsumowanie i perspektywy

Dla 40-letniego sukcesu C++ potrzebne są radykalne zmiany: realistyczne standardy, epoki dla ewolucji i restart wyjątków. To zjednoczy ekosystem, uprości nowy kod i zachowa legacy. Komitet powinien przejść od deklaracji do ustalania praktyki, pozwalając językowi dostosować się bez ciężaru przeszłości.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Czytaj dalej