Wie geht die Standardisierung von C++?

(Bild: Wright Studio/shutterstock.com)
Hinter dem neuen Standard steht ein Prozess, an dem internationale Experten engagiert teilnehmen. Ein Werkstatteinblick in das oft zÀhe Handwerk der Normierung.
Die Programmiersprache C++ und ihre wichtigsten Bibliotheken sind seit 1998 ein Standard der Internationalen Organisation fĂŒr Normung (International Organization for Standardization, kurz: ISO). Seit der Veröffentlichung des ersten Standards C++98 hat es mehrere Aktualisierungen gegeben. Der neueste Standard, C++20, ist zwar noch nicht offiziell verabschiedet, mehrere Features sind jedoch bereits in verschiedenen Compilern verfĂŒgbar.
"C mit Klassen": AnfÀnge des C++-Standards
Erste Arbeiten an C++ datieren in das Jahr 1979 zurĂŒck, damals noch unter dem Arbeitstitel "C mit Klassen". Ziel war es zunĂ€chst, die Effizienz von C mit der ProduktivitĂ€t objektorientierter Sprachen wie Simula zu verbinden. SpĂ€ter kamen weitere Programmierparadigmen wie generische und Metaprogrammierung hinzu, und C++ entwickelte sich zu einer recht komplexen Multiparadigmensprache. 1998 erschien der erste Standard der Sprache und 2003 eine Nachbesserung davon. Der folgende Standard war ursprĂŒnglich fĂŒr die Nullerjahre geplant und trug daher den Arbeitstitel "C++0x". Da C++ dafĂŒr radikal ĂŒberarbeitet, um nicht zu sagen, neu erfunden wurde, hat sich dieser Prozess bis 2011 hingezogen. Spötter haben C++11 daher auch hexadezimal als "C++0xb" bezeichnet. Seither hat die ISO regelmĂ€Ăig alle drei Jahre einen neuen Standard verabschiedet (C++14, C++17, C++20 â s. Abb. 1).

(Bild: isocpp.org)
Selbst Corona wird diesen Rhythmus wahrscheinlich nicht unterbrechen. Der Vorsitzende des ISO-Standardkomitees Herb Sutter hatte als Reaktion auf die Verzögerungen bei C++11 eine strenge Taktung vorgeschlagen, die sich auch als Zugmodell veranschaulichen lĂ€sst: "Wer rechtzeitig da ist, fĂ€hrt mit; wer nicht, muss auf den nĂ€chsten Zug [i. S. v. Standard] warten" (Quelle: Bjarne Stroustrup, Thriving in a Crowded and Changing World, S. 21 [1] [1]). Mehr dazu lĂ€sst sich dem Kasten "PlanmĂ€Ăige Abfahrt" [2] entnehmen.

"Nichts ist schwieriger auszufĂŒhren, unsicherer hinsichtlich des Erfolgs und gefĂ€hrlicher zu handhaben als das Schaffen einer neuen Ordnung. Denn der Reformer zieht sich die Feindschaft derer zu, die von dem alten System profitiert hatten, und findet nur laue Verteidiger unter den NutznieĂern des Neuen."
- NiccolĂČ Machiavelli, Der FĂŒrst (1513), als Motto fĂŒr Standardisierung zitiert in der Printversion dieses Artikels. Er ist Teil des Developer-Sonderhefts "Modernes C++" [3], in dem er sich auf den Seiten 84 bis 90 befindet.
Internationaler Standardisierungsprozess
Die International Organization for Standardization mit Sitz in Genf ist die Vereinigung nationaler Normungsorganisationen. Ihr GrĂŒndungsjahr war 1947, die offiziellen Amts- und Arbeitssprachen sind bis heute britisches Englisch, Französisch und Russisch. Derzeit sind 165 LĂ€nder Mitgliedsstaaten bei der ISO. Im Subkomitee fĂŒr Programmiersprachen sind etwa 21 LĂ€nder als stimmberechtigte Mitglieder vertreten [4], wobei die genaue Zahl Schwankungen unterliegt (s. Abb. 2). Weitere LĂ€nder nehmen als Beobachter an den Standardisierungsprozessen teil, auch Organisationen wie Ecma International und die Linux Foundation haben Vertreter bei der ISO (mehr Informationen finden sich im Kasten "Subkomitee fĂŒr Programmiersprachen").

(Bild: iso.org/members.html)
Um beim Ăbersetzen des Organisationsnamens nicht unterschiedliche Akronyme in verschiedenen Sprachen zu haben, hat man sich auf die gemeinsame Kurzform ISO â vom griechischen "isos" fĂŒr "gleich" â verstĂ€ndigt. In der Zusammenarbeit mit den nationalen Komitees arbeiten von der ISO anerkannte Experten EntwĂŒrfe aus, und die ISO schlĂ€gt sie den entsprechenden Expertengremien der nationalen Komitees vor. In vielen FĂ€llen spiegeln die Strukturen der nationalen Organisationen die der ISO wider. [5]
"After C++11, several members wanted a shorter cycle and Herb Sutter, the convener, suggested we adopt a train model. That is, the train leaves at its scheduled time and anyone not on board will have to wait for the next scheduled departure. People liked that and there was a long discussion about what would be the right interval between standards revisions."
â Bjarne Stroustrup, Thriving in a Crowded and Changing World, [6] S. 21 [1]
Phasen auf dem Weg
Die Entwicklung eines internationalen Standards erfolgt in mehreren Phasen. In der anfĂ€nglichen Antragsphase wird eine Projektbeschreibung â New Work Item Proposal (NP) â verfasst und den nationalen Gremien vorgeschlagen. Stimmen mindestens fĂŒnf Nationen dem Projekt zu, beginnt die offizielle Arbeit am Standard. In der folgenden Komiteephase werden Committee Drafts (CDs) erarbeitet, die eine Zustimmungsrate von mindestens zwei Dritteln der zur Abstimmung berechtigten nationalen Komitees erfordern. Nicht alle nationalen Komitees sind bei den Programmiersprachen aktiv, und die Programmiersprachen haben auch unterschiedlich stark besetzte AusschĂŒsse. Daher nehmen deutlich weniger Nationen an der Abstimmung teil, als insgesamt in der ISO vertreten sind. In der Vergangenheit stimmten bei den Standardisierungen von C++ etwa zehn bis zwölf Nationen ab [7], kĂŒnftig werden es womöglich mehr.
Daneben können und sollen die nationalen Komitees (unabhĂ€ngig von ihrem Status als stimmberechtigtes oder beobachtendes Mitglied) Kommentare zu erwĂŒnschten und erforderlichen Ănderungen einbringen. Die Experten der ISO mĂŒssen auf diese Kommentare reagieren und versuchen, den Standard entsprechend nachzubessern. In EinzelfĂ€llen kommt es auch vor, dass die ISO-Experten die im nationalen Kommentar vorgeschlagene Ănderung nach einer PrĂŒfung zurĂŒckweisen, da sie zu der Erkenntnis gelangt sind, dass der Status quo besser oder die Ănderung noch nicht ausgereift ist. In einem gröĂeren Projekt â wie bei der Standardisierung von C++ â können auch mehrere aufeinanderfolgende CDs verfasst werden.
Draft for International Standard (DIS)
In der ĂberprĂŒfungsphase wird ein Draft for International Standard (DIS) erstellt, der neben den zwei Dritteln an Zustimmung der stimmberechtigten Teilnehmer der jeweiligen Abstimmung auch erfordert, dass nicht mehr als ein Viertel der nationalen Komitees dagegen stimmt. Wenn es im Idealfall keine Gegenstimmen gibt, kann das Dokument die letzte Phase ĂŒberspringen und wird direkt als internationaler Standard veröffentlicht. In dieser Phase befand sich C++20, wĂ€hrend die Printversion dieses Artikels entstand: Die Mitglieder des Ausschusses fĂŒr Programmiersprachen hatten bis zum 14. August 2020 Zeit, im Namen des Deutschen Instituts fĂŒr Normung (DIN) ĂŒber den C++20-Draft (DIS) mit der offiziellen Dokumentenbezeichnung N2638 abzustimmen.
Soweit sie an der Abstimmung teilgenommen haben, haben alle Stimmberechtigten fĂŒr den Standard gestimmt, ohne weitere Kommentare abzugeben. Der Entwurf (DIS) von C++20 wurde am 4. September 2020 einstimmig angenommen und hat damit dem Vorsitzenden der zustĂ€ndigen WG21-Arbeitsgruppe Herb Sutter zufolge die endgĂŒltige technische Genehmigung erhalten. Die finale redaktionelle Ăberarbeitung und formelle Veröffentlichung erfolgte Ende 2020.
HĂ€tte der DIS auf diesem Weg nicht genĂŒgend Zustimmung erfahren, wĂ€re der Prozess in die BestĂ€tigungsphase gegangen, in der die stimmberechtigten Mitglieder das Standarddokument als Final Draft for International Standard (FDIS) nicht mehr kommentieren, sondern nur noch bestĂ€tigen oder ablehnen dĂŒrfen. Die Kriterien sind die gleichen wie beim DIS: Mindestens eine Zweidrittelmehrheit an Zustimmungen und höchstens ein Viertel an Ablehnungen (nicht mehr als derzeit fĂŒnf Gegenstimmen) fĂŒhren zur Annahme des vorgeschlagenen Standards.
Technische Spezifikationen (TS)
Neben diesem Vorgehen fĂŒr Internationale Standards (IS) können die ISO-Gremien auch technische Spezifikationen (TS) erarbeiten. Das wird in C++ hĂ€ufig bei umfangreicheren Features â wie den Concepts oder dem Dateisystem â gemacht, wenn unsicher ist, ob die Spezifikation des Features bei der Verabschiedung des nĂ€chsten Sprachstandards den hohen AnsprĂŒchen des Komitees wohl gerecht werden kann. Dann wĂ€ren neben der Hauptspezifikation des Features auch alle Verweise darauf in letzter Minute aus dem C++-Standard zu entfernen. Mithilfe einer TS kann eine Arbeitsgruppe an einem neuen Feature deutlich unabhĂ€ngiger arbeiten. Sobald das Komitee davon ĂŒberzeugt ist, dass die Spezifikation des Features in der TS so weit ausgereift ist, dass es die Fertigstellung des nĂ€chsten C++-Standards nicht gefĂ€hrdet, wird die TS an den entsprechenden Stellen im Entwurf des internationalen Standards eingefĂŒgt.
Ein konkretes Beispiel wĂ€re das schon vor einiger Zeit vorgestellte Feature "Design by Contract", zu dem drei VorschlĂ€ge und vier GegenvorschlĂ€ge eingingen. Es fand noch keine abschlieĂende Zustimmung, da noch nicht alle Experten es fĂŒr ausgereift hielten. Nun wartet der C++20-Zug nicht auf die Fertigstellung des Features, sondern rollt gemÀà Fahrplan aus, und das Feature muss auf den nĂ€chsten Standard warten. Um das Genfer Ticket fĂŒr C++23 zu erhalten, muss es erst alle Phasen des Standardisierungsprozesses durchlaufen haben.
ReisebeschrÀnkungen und Disruption durch die Pandemie
Vor dem Corona-Ausbruch im FrĂŒhjahr 2020 traf sich das Standardkomitee regelmĂ€Ăig. Diese Treffen fanden frĂŒher zweimal jĂ€hrlich und vor der Verabschiedung eines neuen Standards auch dreimal im Jahr statt. Seit 2016 gab es aufgrund der massiv gestiegenen AktivitĂ€t jĂ€hrlich sogar drei Sitzungen. Da das US-amerikanische Komitee ANSI (American National Standards Institute) mit Abstand die meisten Experten stellt, sind die ISO-Sitzungen aus praktischen GrĂŒnden zugleich auch Sitzungen des entsprechenden ANSI-Komitees. Daher fanden die Sitzungen traditionellerweise auch mindestens einmal pro Jahr in den USA und mindestens einmal in einem anderen Land statt.
Aufgrund der im MĂ€rz von der Regierung Trump eingefĂŒhrten ReisebeschrĂ€nkungen waren die letzten drei Sitzungen in Europa verortet (Köln, Belfast, Prag), und eine geplante vierte (in der bulgarischen Hafenstadt Varna) wurde nur wegen der Pandemie verschoben. Bei den letzten Sitzungen war typischerweise etwa ein Dutzend Nationen vertreten, darunter Experten aus Bulgarien, Deutschland, Finnland, Frankreich, GroĂbritannien, Kanada, den Niederlanden, Polen, Russland, Spanien, der Schweiz, der Tschechischen Republik und den USA. Dies mag im VerhĂ€ltnis zu den insgesamt 165 Mitgliedsstaaten als wenig erscheinen, stellt aber schon eine Verbesserung zur Vergangenheit dar, als sich nur sieben bis acht Nationen aktiv an der C++-Standardisierung beteiligt hatten [8] und osteuropĂ€ische LĂ€nder noch nicht vertreten waren.
Normaler Ablauf der Sitzungen
Die Sitzungen dauern immer von Montagmorgen bis Samstag gegen Mittag. WĂ€hrend der Eröffnung werden kurz die relevanten Richtlinien umrissen, alle stimmberechtigten Teilnehmer verabschieden das Protokoll der vorigen Sitzung und einzelne Teilnehmer berichten ĂŒber AktivitĂ€ten des Komitees und anderer relevanter Organisationen. Daraufhin werden die Diskussionsrunden der Arbeitsgruppen im Komitee organisiert. Diese Diskussionsrunden erstrecken sich dann bis Freitag. Die Arbeitsgruppenleiter reichen abschlieĂend ihre sogenannten Motions ein, das sind formale AntrĂ€ge auf Ănderungen am Standard. FĂŒr solche Ănderungen muss es in der Arbeitsgruppe einen deutlichen Konsens geben. DafĂŒr sind mindestens zwei Drittel an Jastimmen erforderlich, angestrebt ist sogar eine Zustimmungsrate von drei Vierteln.
Am Samstag findet unter Leitung des Vorsitzenden die offizielle Abstimmung mit dem gesamten Komitee statt. FrĂŒher war das ein zweistufiges Verfahren: Erst erfolgte die Abstimmung der US-amerikanischen Delegation und danach eine Abstimmung nach LĂ€ndern. Herb Sutter als der derzeitige Vorsitzende hat dieses Vorgehen vor einigen Jahren dahin gehend geĂ€ndert, dass zunĂ€chst eine Abstimmung unabhĂ€ngig von der Staatszugehörigkeit stattfindet (wobei in der US-Delegation nur eine Stimme pro Institution und nicht pro Experte zulĂ€ssig ist). Das Ziel dieser Abstimmung ist es, zu ermitteln, ob der vom Komitee erarbeitete Standardentwurf gute Chancen auf Akzeptanz durch die nationalen Komitees hat.
Falls der Vorsitzende feststellt, dass die Gegenstimmen von Vertretern mehrerer Nationen kommen, findet noch eine in LĂ€nder untergliederte Abstimmung statt. Letzteres ist jedoch selten der Fall und kam 2019 in Köln nicht vor. Auch hier ist ein deutlicher Konsens erforderlich, das heiĂt zwei Drittel an Jastimmen sowohl unter den Experten als auch unter den Nationen. Um das mĂŒhsame AuszĂ€hlen der Stimmen zu vermeiden, fragt der Vorsitzende zunĂ€chst nach EinwĂ€nden gegen eine einstimmige Zustimmung und klĂ€rt damit, ob eine Abstimmung ĂŒberhaupt erforderlich ist.
Das C++-Komitee wÀchst und wÀchst
Das Standardisierungskomitee fĂŒr C++ ist innerhalb der ISO offiziell die Arbeitsgruppe ISO/IEC JTC1/SC22/WG21, wobei JTC1 fĂŒr "Joint Technical Committee 1", SC22 fĂŒr "Subcommittee 22" (zustĂ€ndig fĂŒr Programmiersprachen) und WG21 fĂŒr "Working Group 21" steht. Um als Experte mitzuarbeiten, muss man sich durch die jeweilige nationale Normungsinstitution â in Deutschland das DIN (Deutsches Institut fĂŒr Normung) â delegieren lassen.

(Bild: isocpp.org)
Wie Abbildung 3 illustriert, ist das C++-Komitee seit 1990 deutlich gewachsen. Bei den letzten Sitzungen waren regelmĂ€Ăig ĂŒber 100 Experten anwesend. Erfreulicherweise ist auch die deutsche PrĂ€senz darin immer stĂ€rker geworden. Zeitweise gab es keine deutsche Delegation, und der Verfasser war bei seiner ersten Sitzung 2008 der einzige offizielle Vertreter des Deutschen Instituts fĂŒr Normung (DIN). Die anwesenden deutschen Experten waren keine DIN-Mitglieder, und umgekehrt waren die meisten DIN-Mitglieder damals Akademiker, die mangels passender Reisebudgets nicht an den Sitzungen teilnehmen konnten. In den letzten Jahren waren immer mehrere offizielle DIN-Vertreter bei den Meetings vor Ort.
Das ISO-Komitee lĂ€sst auch GĂ€ste bei den Sitzungen zu. Eigentlich sollte man sich vor der zweiten Teilnahme von seiner nationalen Institution legitimieren lassen, aber diese Regelung wird nicht streng kontrolliert. Die offiziellen Vertreter sind einander jedoch persönlich so weit bekannt, dass die Teilnahme nicht registrierter GĂ€ste an den Abstimmungen auffallen wĂŒrde. Gerade die Sitzung vergangenes Jahr in Köln hat zahlreiche deutsche Nichtmitglieder zusĂ€tzlich angezogen. Viele C++-Freunde haben die Gelegenheit beim Schopf ergriffen, die Standardisierung einmal aus der NĂ€he zu verfolgen, sodass neben dem guten Dutzend offizieller deutscher Vertreter noch etwa doppelt bis dreimal so viele GĂ€ste anwesend waren.

(Bild: isocpp.org)
Hierarchischere Strukturen und neue Study Groups
Das Komitee ist nicht nur zahlenmĂ€Ăig gewachsen, die Struktur der internen Arbeitsgruppen ist â wie in Abbildung 4 dargestellt â auch zunehmend hierarchischer geworden. 2008 gab es lediglich drei Arbeitsgruppen: Core, Evolution und Library. In der Arbeitsgruppe "Evolution" wurden neue Sprachfeatures diskutiert und ihre endgĂŒltige Spezifikation in der Gruppe "Core" ausformuliert. Die Library-Arbeitsgruppe hat alle Themen im Zusammenhang mit der Standardbibliothek bearbeitet. Diese Arbeitsgruppe wurde dann in "Library" und "Library Evolution" aufgespalten, wobei sich letztere mit den Neuerungen in der Standardbibliothek beschĂ€ftigt.
Im Laufe der Zeit sind daneben noch eine Reihe von Study Groups entstanden, die sich auf je ein umfangreicheres Element wie Concepts oder Module spezialisiert haben (s. Abb. 3). Wenn ein Feature im GroĂen und Ganzen ausgearbeitet ist und Aufnahme in den Standard gefunden hat, kann solch eine Study Group auch wieder stillgelegt werden. Eventuell aufkommende Detailprobleme bearbeitet dann eine andere Arbeitsgruppe wie Core. Neben den vier groĂen Arbeitsgruppen Core, Evolution, Library und Library Evolution gibt es zurzeit folgende aktive Study Groups mit zumeist offensichtlichen Themen:
- Concurrency: ParallelitÀt und NebenlÀufigkeit
- Modules
- Networking
- Transactional Memory
- Numerics: unter anderem Festkomma-, dezimale Gleitkommazahlen, rationale Zahlen
- Feature Test: portable Tests, ob ein Compiler ein bestimmtes Feature unterstĂŒtzt
- Compile-Time Programming
- Undefined Behavior and Vulnerabilities: kohÀrente Verbesserungen gegen undefiniertes oder unspezifiziertes Verhalten und Schwachstellen
- Human-Machine Interface und I/O: AusgabegerÀte wie Grafik und Audio, EingabegerÀte
- Game Development and Low Latency
- Tooling: Entwicklerwerkzeuge (insbesondere bezĂŒglich Modulen) und Paketierung; Evolution Working Group Incubator: Vorabdiskussionen fĂŒr die Evolution Working Group
- Library Evolution Working Group Incubator: wie die vorangegangene fĂŒr Library Evolution
- Machine Learning: KI-spezifische Funktionen, aber auch lineare Algebra und Graphalgorithmen
- Education: Empfehlungen zum Lehren von modernem C++
- Contracts: SprachunterstĂŒtzung fĂŒr Design by Contract.
Vier Study Groups ruhen zurzeit: File System, Concepts, Ranges und Data Bases. Bei einer Sitzung des Komitees tagen immer mehrere Gruppen gleichzeitig. WĂ€hrend 2008 noch drei Besprechungen parallel liefen, gab es im Juni 2019 in Köln durchschnittlich sieben bis acht parallele Diskussionsrunden. Dabei fanden sich die vier Hauptarbeitsgruppen ĂŒber den gesamten Sitzungszeitraum hinweg zusammen. Auch die beiden Incubator-Gruppen haben fast ĂŒber den gesamten Zeitraum hinweg getagt (es gibt immer viel Neues in C++). Manche Study Groups wie Compile-Time Programming haben sich nur einen halben Tag lang getroffen. Gruppen mit weniger Input tagen auch nicht bei jeder Sitzung.
- 165 LĂ€nder sind Mitglied der ISO (s. Abb. 2).
- 21 Vollmitglieder im Subkomitee fĂŒr Programmiersprachen.
- 3 Mitgliedsarten: Es gibt drei Kategorien der Mitgliedschaft, die sich hinsichtlich Zugang und Mitspracherecht unterscheiden.
Die Mitgliedschaft ist auf staatlicher Ebene in National Standards Bodies organisiert, pro Staat ist nur eine Mitgliedschaft und Stimme möglich. Privatpersonen und Firmen können nicht Mitglieder sein, aber Staaten lassen sich durch nationale Normungsbehörden vertreten, die Experten entsenden.
- Vollmitglieder (Member Bodies) wie Deutschland, DĂ€nemark, GroĂbritannien, die Niederlande, Slowenien, die Schweiz, Israel, China, Russland und die USA nehmen an den technischen und strategischen Sitzungen teil und stimmen ab. Sie adaptieren und verkaufen die ISO-Standards in ihrem Staatsgebiet. Zurzeit gibt es im Programmiersprachenkomitee etwa 21 Vollmitglieder.
- Korrespondierende Mitglieder (Correspondent Members) wie Island, Norwegen, Ungarn, RumÀnien, Neuseeland, Ghana und Iran verfolgen die Entwicklung der ISO-Standards als Beobachter, sie können Kommentare und Rat einbringen.
- Subskribenten (Subscribers) halten sich ĂŒber die ISO-Arbeit auf dem Laufenden, nehmen aber nicht daran teil.
- ISO-Mitglieder haben die Wahl, ob sie an einem bestimmten technischen Komitee teilnehmen möchten und zu welchem Grad. Vollmitglieder können sich in jedem Gremium entscheiden, ob sie mit Stimmrecht oder als Beobachter mitwirken.
- Aktive Teilnehmer sind in einem Gremium stimmberechtigt und mĂŒssen sogar an den Abstimmungen teilnehmen. Je nach Zusammensetzung gibt es also eine unterschiedliche Anzahl an Stimmberechtigten pro Gremium. Je nach Thema gibt es unterschiedliche Abstimmungskriterien. Bei der Normerarbeitung ist es meistens eine Zweidrittelmehrheitsentscheidung der aktiven Vollmitglieder.
- Bei der ISO hat jedes Land eine Stimme. Wer als Vollmitglied zur Abstimmung verpflichtet ist, aber keine Expertenmeinung einzubringen hat, kann sich enthalten.
- Finanzierung der ISO: Die Mitglieder zahlen einen Beitrag, um die laufenden Kosten des Genfer BĂŒros zu decken. Der Beitrag steht in Relation zum Bruttosozialprodukt und zur Handelsbilanz jedes Landes. Eine weitere Einnahmequelle ist der Verkauf von Standards. Die Verwaltungskosten des ISO-Sekretariats machen etwa ein FĂŒnftel der Kosten aus, Projekte zur Entwicklung spezifischer Standards und technischer Arbeiten den Rest. Diese Kosten wie auch Reisekosten tragen die Mitglieder und Organisationen, deren Experten teilnehmen.
Lebenszyklus eines Standardisierungsvorschlags
Um ein neues Feature in den Standard aufzunehmen, muss jemand einen Vorschlag dafĂŒr einreichen, und bis zur endgĂŒltigen Standardisierung durchlĂ€uft dessen Bearbeitung mehrere Phasen. Mit der zuvor beschriebenen feingranularen Strukturierung des Komitees spielen die Arbeits- und Studiengruppen verschiedene Rollen und werden in unterschiedlichen Phasen des Standardisierungsprozesses aktiv. Diese Rollen sind:
- Akzeptanz: Die beiden Incubator Study Groups entscheiden, ob es sich lohnt, eine neue Idee weiterzuverfolgen.
- DomÀnenexpertise: Die anderen Study Groups diskutieren, inwieweit der Vorschlag dem Wissensstand des jeweiligen Fachgebiets gerecht wird.
- Design: Die beiden Arbeitsgruppen Evolution und Library Evolution verfeinern die Umsetzung der Idee. Das umfasst technische Details â etwa welche Funktionsargumente konstant sein sollten oder ob etwas zur Compilezeit berechenbar sein soll und ob die Schnittstelle einen Konflikt mit anderen Features birgt.
- Formulierung: Die beiden anderen Arbeitsgruppen Core und Library â im Weiteren Wortgruppen genannt â diskutieren die genaue Formulierung, die es in den Standard aufzunehmen gilt.
Durch diese Aufgabenteilung durchlĂ€uft ein Vorschlag fĂŒr ein neues Sprachfeature typischerweise die folgenden Phasen:
- Coole Idee, die in einem Blog, einer Mailingliste, Reddit et cetera veröffentlicht wird. (Die meisten VorschlĂ€ge schaffen es nie ĂŒber dieses Stadium hinaus.)
- Die Antragsteller reichen ein erstes Designkonzept ein und stellen es meist als Erstes der Incubator-Gruppe vor. Der Entwurf sollte eine BegrĂŒndung, in Betracht gezogene Alternativen, konkrete Beispiele und einen konkreten Vorschlag enthalten, der detailliert genug ist, um ihn zu bewerten.
- Die Incubator-Gruppe bekundet Interesse und veranlasst, dass die Diskussion dieses allgemeinen Features in die nÀchste Runde geht. Daraufhin leitet sie den Vorschlag an die Designgruppe und (soweit vorhanden) parallel an eine Gruppe von Domainexperten weiter.
- Die Design- und Expertengruppen bitten nach ausfĂŒhrlichen Diskussionen um Nachbesserungen. Das wiederholt sich in der Regel ĂŒber mehrere Sitzungen. Liegen konkurrierende VorschlĂ€ge vor, dauert die Iteration und Konvergenz etwas lĂ€nger. Wenn viele Iterationen erforderlich sind und zwischen den Sitzungen zusĂ€tzliche persönliche oder telefonischen Sitzungen infrage kommen, kann der Vorsitzende der Designgruppe empfehlen, eine Studiengruppe fĂŒr das Thema zu grĂŒnden. Ăberarbeitete VorschlĂ€ge wandern dann wieder in die Entwurfsgruppe zurĂŒck.
- Die Designgruppe stimmt zu, eine bestimmte ausgereifte Designrichtung zu verfolgen, und bittet um eine erste Ausformulierung fĂŒr den Standardtext.
- Die Designgruppe stimmt zu, eine bestimmte ausgereifte Designrichtung zu verfolgen, und bittet um eine erste Ausformulierung fĂŒr den Standardtext.
- Die Wortgruppe ĂŒberprĂŒft und verfeinert die Formulierung, bevor sie letztlich zustimmt, die Featurespezifikation in den aktuellen Entwurf des Sprachstandards aufzunehmen. Daraufhin erhĂ€lt das gesamte Komitee den Vorschlag zur Abstimmung.
- Das gesamte Komitee stimmt zu, den Wortlaut in den aktuellen C++-Entwurf zu ĂŒbernehmen, und erstellt eine Issue-Liste zum Nachverfolgen von Problemfragen.
- Design- und Wortgruppen verfeinern die Spezifikation und leiten jede Ănderung zur Genehmigung an das komplette Komitee weiter. Der Wortlaut muss das verabschiedete Design korrekt beschreiben; alle Fragen dazu, was bestimmte Codebeispiele bedeuten sollen, mĂŒssen im Design gelöst werden und sich in der Formulierung widerspiegeln; der Wortlaut muss so klar sein, dass die Compilerentwickler exakt wissen, was sie zu implementieren haben. Das Ziel ist, dass alle Programmierer portablen Code schreiben können, der bei verschiedenen Compilerimplementierungen auf die gleiche Weise funktioniert.
- Das vollstĂ€ndige Komitee sendet den Arbeitsentwurf (CD oder DIS) zur Abstimmung ĂŒber ISO an die nationalen Standardinstitutionen, und einige Monate spĂ€ter senden diese die Kommentare zur Abstimmung an das Komitee zurĂŒck.
- Design- und Wortgruppen entscheiden ĂŒber Kommentare zur Abstimmung und leiten jede Ănderung zur Genehmigung an das gesamte Komitee weiter.
- Das vollstĂ€ndige Komitee sendet den Arbeitsentwurf (FDIS) zur endgĂŒltigen Abstimmung und/oder Veröffentlichung.
- Wurde der Vorschlag zunĂ€chst in einem TS veröffentlicht, kann das Komitee nach Erhalt von Beta-Feedback (normalerweise einschlieĂlich der Erfahrung eines Compileranbieters, der das Feature implementiert und dies von Nutzern hat testen lassen) den Editor beauftragen, den TS in den Arbeitsentwurf von C++ zu integrieren.
Ein kleiner und wenig kontroverser Vorschlag kann mehrere Phasen wĂ€hrend eines Meetings durchlaufen, wĂ€hrend andere VorschlĂ€ge mehrere Meetings fĂŒr eine einzelne Phase benötigen.
Fazit
Die Standardisierung von C++ ist keine einfache Sache. Welcher Aufwand jedoch wirklich dahinter steckt, das kann man wohl erst erahnen, wenn man selbst daran teilgenommen oder gar versucht hat, eine Ănderung im Standard durchzuboxen. Das ISO-Standardisierungskomitee ist zwar eine staatliche Institution, allerdings kommt es in der Praxis des Standardisierens auf hohes privates Engagement an. Umso mehr ist der ehrenamtliche Einsatz aller Beteiligten zu wĂŒrdigen. Mit C++20 hat sich die Sprache noch einmal deutlich weiterentwickelt und bietet uns Programmierern eine ganze Reihe wunderbarer Verbesserungen.
Dr. Peter Gottschling
ist GrĂŒnder und GeschĂ€ftsfĂŒhrer der Firma SimuNova [9], die die Matrix Template Library weiterentwickelt sowie Training und Beratung zu C++ anbietet. Sein Buch "Discovering Modern C++" soll bald in der zweiten, auf C++20 aktualisierten Auflage erscheinen. Er ist Mitglied des ISO-Komitees zur Standardisierung von C++, Obmann des Programmiersprachenausschusses des DIN und GrĂŒnder der C++-User Group Dresden.
Literatur:
[1] Bjarne Stroustrup; Thriving in a Crowded and Changing World: C++ 2006â2020 (2020); in: Proceedings of the Fourth ACM SIGPLAN Conference on History of Programming Languages; Association for Computing Machinery: doi.org/10.1145/3386320, S. 21
[2] zitiert nach Bjarne Stroustrup; The C++ Programming Language; Addison-Wesley 1985 (4. Aufl. 2013), S. 448 (dt. EinfĂŒhrung in die Programmierung mit C++)
(sih [10])
URL dieses Artikels:
https://www.heise.de/-5994676
Links in diesem Artikel:
[1] https://dl.acm.org/doi/10.1145/3386320
[2] #anchor_1
[3] https://shop.heise.de/ix-developer-modernes-c/PDF
[4] https://www.iso.org/who-develops-standards.html
[5]
[6] https://dl.acm.org/doi/10.1145/3386320
[7] https://www.iso.org/sites/ConsumersStandards/voting_iso.html
[8] https://www.iso.org/members.html
[9] https://www.simunova.com/de/
[10] mailto:sih@ix.de
Copyright © 2021 Heise Medien