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.
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.
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
Brak komentarzy.