Wie geht die Standardisierung von C++?
Seite 4: 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.
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.
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.