augustus 2010 Archieven
Rapperswil 2-7 augustus 2010: een C++ vergadering
Van 2 tot en met 7 augustus werd in Rapperswil, Zwitserland vergaderd door de ISO C++ standaardisatiecommissie. Ik was daar voor Nederland als Head of Delegation aanwezig namens het NeN voor AT Computing en de NLUUG.
Je kunt je afvragen waar in zo'n vergadering over gesproken wordt. Waarom moet er zo lang gepraat worden?
In de vergadering in Rapperswil waren 8 landen vertegenwoordigd door zo'n 60 mensen. Het grootste blok komt traditiegetrouw uit de verenigde staten. Ieder land heeft tijdens de stemmingen één stem. Daarom wordt tijdens de officiele zittingen altijd eerst over de Amerikaanse mening gestemd, waarna ieder "head of delegation" van de landen hun nationale stem mag uitbrengen. De leden van de standaardisatiecommissie werken bij vendors (compilerleveranciers zoals Microsoft, HP, Sun, RedHat (g++) en EDG (Edison Design Group een OEM compilerbouwer), C++ grootgebruikers zoals Bloomberg en Fermilabs, onderwijsinstellingen zoals universiteiten (en AT Computing!) en vele andere bedrijven en instellingen. Al deze mensen hebben belang bij een standaard die implementeerbaar is, bruikbaar is en onderwijsbaar is. Er zijn dus verschillende belangen, waardoor soms ook spannende discussies kunnen ontstaan.
De eerste C++ standaard (C++98) kwam uit in 1998. Daar is toen lang aan gewerkt. In 2003 kwam er een "tussenversie" waarin kleine onvolkomenheden werden gerepareerd, maar geen grote features werden toegevoegd. Er zit nu een echt nieuwe standaard aan te komen. De werktitel is C++0X hoewel de standaard niet in het eerste decennium van deze eeuw uit is gekomen. Er is vertraging opgelopen omdat op een vrij laat moment een groot feature uit de taal is verwijderd dat maar niet goed gespecifieerd leek te kunnen worden ("concepts"). Een reële datum lijkt nu medio 2011 te zijn.
Geen enkel commissielid kent de hele standaard, of begrijpt van alle ontwerp-beslissingen waarom die genomen zijn. Daarom wordt de vergadering opgesplitst in werkgroepen: Eén of twee werkgroepen over de bibliotheek, Eén of twee over de kern van de taal ("core") en een over concurrency (een van de nieuwe features in de taal is multi-threading). De werkgroepen lopen de voor hun relevante problemen door en doen dan een voorstel voor de gehele vergadering.
Hoewel de atmosfeer ontspannen en vriendschappelijk is, zijn met name de ISO zittingen erg officieel. Er mag absoluut niet de indruk ontstaan dat bedrijven hun mening proberen door te drukken of dat er gefraudeerd wordt. Tijdens de werkgroepvergaderingen wordt er ook regelmatig gestemd, maar dan veel informeler. Vaak worden er "straw polls" gehouden waar alle deelnemers aan de commissie mogen stemmen: "Stel dat we dit probleem oplossen op de besproken manier, zou je daar dan voor of tegen zijn". Meestal kun je kiezen uit vier standpunten: Strongly in Favor, Weakly in Favor, Weakly Against, Strongly Against. Afgekort tot SF, WF, WA en SA. Heel soms kun je ook stemmen voor OMDB ("over my dead body"), maar dat kwam tijdens deze vergadering niet voor. Vaak gaat het dan over nieuwe features, maar omdat in het stadium waarin de commissie nu zit geen nieuwe features worden toegevoegd, speelt dat nu niet.
De commissie heeft een werkdocument dat in feite de standaard in
aanbouw is. In juni 2010 hebben de leden van de ISO (de nationale
standaardisatiecommissies) mogen stemmen over de toenmalige versie
van dat document. Dat document had de status FCD - Final Committee
Draft. De landen hadden de gelegenheid de FCD goed of af te keuren,
en ze konden daarbij commentaar op de tekst zelf leveren. Dat
commentaar kan groot zijn (wij vinden dat feature XYZ verwijderd moet
worden: veel consequenties) maar ook erg klein: "op pagina 123 staat
dat de libraryfunctie zusenmezo een int teruggeeft, terwijl op pagina
456 een voorbeeld staat waarin de functie een long teruggeeft". Deze
commentaren heten "National Body Comments". Tijdens de vergadering in
Rapperswil zijn alle national body comments langsgelopen. Dat waren
er honderden.
De verwachting is dat over twee vergaderingen (in maart 2011) alle commentaren adequaat kunnen zijn afgehandeld en dat het werkdocument met de status FDIS (Final Draft International Standard) naar het ISO gestuurd zal worden. De landen kunnen er dan nog een laatste Ja of Nee tegen zeggen en hopelijk hebben we dan medio 2011 een C++11 standaard. Deze standaard maakt C++ makkelijker te gebruiken en makkelijker te leren.
Daarna blijft de commissie tweemaal per jaar bijeenkomen. Ten eerste zullen er toch weer problemen opduiken in het 1200 pagina's tellende document. Maar ook zal een werkgroep weer nieuw leven ingeblazen worden: evolution. In deze werkgroep worden nieuwe features voorbereid voor de standaard na 2011. Hopelijk zal het mogelijk blijken om het belangrijke onderwerp "concepts" dat helaas niet in de huidige FCD meegenomen kon worden nu wél op een goede manier n de standaard opgenomen kan worden. Het zal foutmeldingen van compilers een stuk beter maken, en het programmeren in C++ nog verder vergemakkelijken.
In een volgende blog gaan we kijken welke spannende features er in C++0X zitten en in hoeverre deze nu al bruikbaar zijn.
