Kris van Rens (Trainer)
Trotz einer Vielzahl aufstrebender Alternativen ist C++ immer noch eine Macht, mit der man rechnen muss, vor allem in der von Altlasten geplagten High-Tech-Branche. In einer Reihe von Artikeln stellt der Trainer des High Tech Institute, Kris van Rens, die Sprache in eine moderne Perspektive. In unserem neuen 4-tägigen Trainingskurs führt Kris van Rens die Teilnehmer in die Grundlagen der Sprache und die wichtigsten Best Practices ein.
Im vergangenen Juli wurde die Programmiersprache Carbon auf der CppNorth C++ Konferenz in Toronto, Kanada, offiziell angekündigt. Carbon wird als „experimenteller Nachfolger von C++“ vorgestellt und wurde als Open-Source-Projekt gestartet, und zwar von Google. Moment mal… Google will einen C++-Nachfolger entwickeln? Bis vor kurzem war das Unternehmen stark an der Entwicklung der Sprache C++ und der Entwicklung des Clang C++ Front-Ends für den LLVM-Compiler beteiligt. Angesichts der Tatsache, dass bei Google Zehntausende von Ingenieuren an Milliarden von Codezeilen arbeiten, erscheint es ziemlich gewagt, den Weg einer völlig neuen Sprache einzuschlagen.
Warum sollte sich ein so großes Unternehmen wie Google an ein solch gewagtes Projekt wagen? Nun, es ist ein Symptom für den Zustand und die Entwicklung von C++. Für diejenigen, die die Entwicklung der Sprache in den letzten Jahren nicht mitverfolgt haben: Es hat einige wichtige Diskussionen gegeben. Natürlich geht es bei den Treffen des C++-Komitees darum, Diskussionen zu führen, aber ein Thema ist immer wieder aufgetaucht, ohne dass eine Einigung erzielt werden konnte: die Frage, ob es sich lohnt, das Sprachdesign auf Kosten der Abwärtskompatibilität zu verbessern oder nicht.
Schlankere Verwaltung
C++ gibt es nun schon seit etwa vierzig Jahren und wird weltweit zur Erstellung leistungsfähiger Software verwendet. Nach einer Periode relativer Ruhe nach der ersten ISO-Standardisierung im Jahr 1998 ist es dem Komitee gelungen, seit 2011 kontinuierlich alle drei Jahre große Verbesserungen einzuführen. Infolgedessen hat sich die Sprache im Vergleich zu dem, womit wir in den Neunzigern und Nullerjahren gearbeitet haben, stark verändert. Allein die Hinzufügung von Funktionen wie Konzepten, Bereichen und Modulen in C++20 hat es in sich.
Gleichzeitig ist jedoch bekannt, dass die Weiterentwicklung der Sprache C++ eine große Herausforderung darstellt. Die Last, jahrzehntelange technische Schulden zu tragen und gleichzeitig die Abwärtskompatibilität aufrechtzuerhalten, ist beträchtlich – zu viel für manche, wie es scheint. Der Versuch, eine wichtige Sprachfunktion hinzuzufügen, kann bis zu zehn Jahre Lobbyarbeit, Diskussionen, Überprüfungen, Tests, weitere Überprüfungen und sorgfältige Formulierung kosten. Natürlich ist die Einführung erheblicher Änderungen in einem Projekt mit so vielen Beteiligten keine Kleinigkeit, aber zehn Jahre sind in der heutigen technischen Welt buchstäblich ein ganzes Leben. Eine weitere Herausforderung besteht darin, dass das ISO-Komitee überwiegend westlich geprägt ist und die großen asiatischen C++-Anwender wie Indien oder China stark unterrepräsentiert sind. Diese Nachteile sehen nicht gut aus, vor allem nicht im Hinblick auf schnell wachsende, moderne, offen regierte (und relativ junge) Sprachen wie Rust oder Swift.
Sigasi Erweiterung für Visual Studio Code
Sigasi kündigt die Veröffentlichung deri VS Code Extension mit umfassender Unterstützung für SystemVerilog, Verilog und VHDL an. Unsere Erweiterung bietet Funktionen und Sprachunterstützung wie Code-Navigation, Projektverwaltung, Linting, Code-Formatierung, Tooltips, Outline, Autovervollständigung, Hover und vieles mehr!
''Still, I think right now is a very important time for C++ to consider its position in the systems programming universe; it can’t ignore the signals any longer.''
Ist die technische Verschuldung der Sprache C++ wirklich so gigantisch, dass es nahezu unmöglich ist, neue, wichtige Funktionen hinzuzufügen? Die Ein-Mann-Armee Sean Baxter vom Circle C++ Compiler hat bewiesen, dass dem nicht so ist. Allein in den letzten Monaten hat er im Alleingang bewiesen, dass es möglich ist, beträchtliche Funktionen wie einen echten Summentyp und Tupel auf Sprachebene hinzuzufügen. Zugegeben, eine Implementierung in einem einzigen Compiler eines C++-Dialekts ohne einen gründlich überprüften Vorschlag ist noch lange kein offizielles C++-Sprachmerkmal, aber es zeigt zumindest, wie viel Spielraum und Möglichkeiten es in der Syntax und der Sprache insgesamt gibt – wenn wir uns wirklich darauf einlassen. Es zeigt auch, dass die Last der technischen Schulden allein nicht der begrenzende Faktor bei der Entwicklung der Sprache ist.
Das Governance-Modell für die C++-Sprache wird sich wahrscheinlich nicht so bald ändern, da es so eng mit dem ISO-Prozess und den Interessengruppen des Komitees verbunden ist. Dennoch denke ich, dass jetzt ein sehr wichtiger Zeitpunkt für die Sprache ist, um ihre Position im Universum der Systemprogrammierung zu überdenken; sie kann die Signale nicht länger ignorieren. Vielleicht hilft eine schlankere Governance-Struktur oder die Möglichkeit, Änderungen vorzunehmen, um die technischen Schulden in einer zukünftigen Version abzubauen – wer weiß. Leider werden solche grundlegenden Änderungen des Prozesses höchstwahrscheinlich ebenfalls Jahre dauern.
Abwarten und Tee trinken
Werden die Nachteile dazu führen, dass C++ in absehbarer Zeit abgeschafft wird? Nein, definitiv nicht. Die schiere Eigendynamik des bestehenden Codes und der Benutzerbasis ist überwältigend. Ein ‚einfacher‘ Wechsel zu einer anderen Sprache ist nicht für jeden eine Option, nicht einmal für Google. Damit das klappt, ist echte Interoperabilität mit C++ (nicht nur C) erforderlich, und da hapert es bei Alternativen wie Rust und Swift noch. Nicht umsonst wirbt Google mit der C++-Interoperabilität als Hauptmerkmal von Carbon, das die schrittweise Übernahme der Sprache aus einer großen bestehenden C++-Codebasis ermöglicht.
Im Moment ist Carbon jedoch nicht viel mehr als eine grobe Spezifikation und eine Ankündigung. Wir müssen abwarten und sehen, ob es die Erwartungen erfüllen kann. In der Zwischenzeit wird sich auch C++ weiterentwickeln, hoffentlich positiv inspiriert durch die Möglichkeiten von Circle und anderen Sprachen in diesem Bereich.