C++-Evolution: Epochen, praxisnahe Standards und neue Ausnahmen
C++-Entwickler kämpfen mit drei Versionen der Sprache: der im Standard beschriebenen, die es nicht gibt; der experimentellen in modernsten Compilern; und der echten in weit verbreiteten Versionen. Diese Lücke zwischen Theorie und Praxis muss geschlossen werden. Der Vorschlag: Sobald ein Feature genehmigt ist, wandert es in eine technische Spezifikation für Compiler-Implementierungen. Es gelangt erst ins volle Standard, wenn es in mindestens zwei großen Compilern unterstützt wird.
Dieser Ansatz deckt Probleme bei der Umsetzung auf, erlaubt Anpassungen ohne Standard-Änderungen und sorgt dafür, dass Features tatsächlich verfügbar sind, wenn der Standard erscheint. Experimentierfreudige Entwickler erhalten frühen Zugriff auf Neuerungen direkt nach der Landung in GCC oder Clang.
Epochen-Mechanismus zur Beseitigung alter Ballast
Das Einführen von 'Epochen' oben in .cpp-Dateien würde die C++-Version für dieses Modul deklarieren. Damit könnten wir Jahrzehnte angesammelten Schrott entsorgen: automatische numerische Typkonvertierungen, Fallstricke bei signed/unsigned-Vergleichen, implizite Array-zu-Pointer-Zerfalls und multiple Initialisierungssyntaxen.
Wichtige Vorteile:
- Dateien aus verschiedenen Epochen in einem Projekt mischen, ohne alten Code umzuschreiben.
- Moderne Code zu älteren Standards transpilieren, um ABI-Kompatibilität zu wahren.
- Ein verbessertes C++ weiterentwickeln, ohne dass Rückwärtskompatibilität zu C es bremst.
Epochen verhindern, dass die Sprache unter historischem Ballast zum Monster aufquillt.
Ausnahmen in C++ neu gedacht
Ausnahmen in C++ waren ein Reinfall der 1980er: teuer, unvorhersehbar und in der Hälfte aller Projekte verboten. Alternativen wie std::expected lösen Zuverlässigkeitsprobleme nicht. Wir brauchen Nullkosten-Ausnahmen, integriert in Epochen: Neue nur in Dateien aus jüngeren Epochen.
Die Vermischung von altem und neuem Code bereitet Integrationsprobleme, doch der Status quo ist unhaltbar. Die Spaltung der Community in 'mit Ausnahmen' und 'ohne' bremst den Fortschritt aus.
Wichtige Erkenntnisse
- Standards sollten implementierte Features kodifizieren, nicht per technischer Spezifikation vorauseilen.
- Epochen ermöglichen die Mischung von altem und modernem Code, während neuer Code von historischen Fehlern gereinigt wird.
- Neue Nullkosten-Ausnahmen rollen epochenspezifisch aus und reduzieren Overhead sowie steigern Vorhersehbarkeit.
- Ohne diese Änderungen droht C++ das Schicksal von PL/I: explodierende Komplexität ohne Gewinne.
- Der Ausschuss sollte strategische Mechanismen priorisieren statt taktischer Kleinigkeiten.
Fazit und Ausblick
Damit C++ weitere 40 Jahre blüht, braucht es kühne Weichenstellungen: pragmatische Standards, Epochen für die Evolution und einen Neustart bei Ausnahmen. Das einigt das Ökosystem, vereinfacht neuen Code und schont den Bestand. Der Ausschuss muss von Deklarationen zu realer Praxis-Dokumentation wechseln und die Sprache ohne Altlasten anpassungsfähig machen.
— Editorial Team
Noch keine Kommentare.