Programmeertaal C++ is vernieuwd. De 2020-versie beschikt over concepts, ranges, coroutines en modules. Voorzitter van de normcommissie programmeertalen bij norminstituut NEN, Jan Christiaan van Winkel, licht de updates toe.
De geüpdatete versie van C++ (officieel geregistreerd onder de norm ISO/IEC 14882) bevat afspraken over veranderingen en simplificaties van de programmeertaal. Ook aanpassingen in de manier waarop C++ wordt gebruikt in bibliotheken (libraries) voor programmeurs komen aan bod.
Eén van de veranderingen in de nieuwe norm is de toevoeging van zogenoemde ‘concepts’. Daardoor moet het eenvoudiger worden om eisen die aan templates (sjablonen voor softwarecode) gesteld worden, vast te leggen. Van Winkel: ‘Zo kun je van een functie definiëren dat die toepasbaar is voor elk type, als dat type een bepaalde functionaliteit ondersteunt.’ Als voorbeeld noemt hij de optelling.
Een andere nieuwe toepassing is ‘coroutines’. Van Winkel: ‘Die veralgemenisering van functieaanroepen biedt veel nieuwe mogelijkheden. Eén daarvan, de generator genoemd, kan enorm schelen in het geheugengebruik. Dat werkt zo: daar waar traditioneel een lijst gebruikt wordt van elementen, hoeven de elementen nu pas berekend te worden als ze nodig zijn. Dat kan in de nieuwe versie zonder de aanroepende code te wijzigen en wordt ook wel ‘lazy evaluation’ genoemd.’
Containers
In de C++-update zijn er naast toevoegingen aan de taal zelf ook nieuwe faciliteiten opgenomen in de standaardbibliotheek. Zo is bijvoorbeeld ‘ranges’ toegevoegd. Dat is een veralgemenisering van een sequence waardoor operaties op een container veel efficiënter zijn op te schrijven en uit te voeren. Van Winkel: ‘Ze bieden een nieuwe notatiewijze waarmee je operaties op sequences (selecties van opeenvolgende code) makkelijk aan elkaar kunt rijgen zoals in Unix/Linux-pipelines gebruikelijk is.’
Ook de bibliotheek voor kalender en tijdzones is behoorlijk uitgebreid, vertelt Van Winkel. Daardoor wordt het makkelijker om in een programma met tijdstippen te werken, ook al zijn er meerdere tijdzones bij betrokken al dan niet met zomer en wintertijd.
Module
De vierde belangrijke vernieuwing volgens Van Winkel is de nieuwe module-faciliteit. ‘In tegenstelling tot het traditionele #include kun je nu per naam aangeven of deze naam zichtbaar moet zijn buiten de module of niet. Ook is de volgorde waarin modules worden geïmporteerd niet meer van belang. Modules zitten elkaar dus niet in de weg en ze maken het mogelijk de logische structuur van je code ook weer te geven in de code.’
“<=>”
Van Winkel ziet concepts, ranges, coroutines en modules als de belangrijkste vernieuwingen, maar wijst tijdens zijn toelichting ook op een nieuwe operator die voor de geüpdatete norm is gemaakt. Het gaat om “<=>”. Dat wordt de ‘space ship operator’ genoemd, naar het uiterlijk van een ruimteschip in computerspellen in de vroege jaren tachtig van de vorige eeuw.
“<=>” maakt het mogelijk om in één keer een drievoudig vergelijkingsresultaat te krijgen. Van Winkel: ‘In plaats van ab, levert a<=>b een volledig uitsluitsel op over of a kleiner, gelijk of groter dan b is. Dat kan met deze nieuwe operator dus in één stap. ‘Met name voor bibliotheekbouwers kan dit in sommige gevallen veel performance schelen.’
Updates C++
De laatste grote nieuwe standaard voor C++ was die van 2011. Sindsdien zijn er twee nieuwe standaarden uitgekomen: C++14 en C++17. Daarin waren geen wijzigingen doorgevoerd die de manier van programmeren in C++ veranderden.
Elk drie jaar is er een update van de norm. Daarbij zijn tweehonderd experts betrokken die in het pré-coronatijdperk zo’n drie keer per jaar samenkwamen en dat nu online organiseren. De commissie stuurt de conceptstandaard dop naar het ISO, waarna de deelnemende landen mogen stemmen. Na goedkeuring publiceert het ISO de standaard, dat is in dit geval in december 2020 gebeurd. Ook voor programmeertalen als Fortran, Cobol en C zijn in ISO-normen vastgelegd.
Marsrover Perseverance
C++ is een programmeertaal voor algemene doeleinden waarvan de ontwikkeling al in de jaren tachtig van de vorige eeuw is gestart. Het is een hogere programmeertaal waarbij programmeurs niet meer afhankelijk zijn van de onderliggende processor. De taal wordt onder meer gebruikt in de infrastructuur van telecomnetwerken, binnen de financiële sector en in de lucht- en ruimtevaart. Zo is het deep space communication network van de Amerikaanse Marsrover Perseverance, die 19 februari 2012 landde op de rode planeet, geprogrammeerd in C++.
Volgens Van Winkel is de stabiliteit van de programmeertaal en het zero overhead-principe, waarbij toepassingen zo zijn ingebakken dat ze niet in de weg zitten als ze niet worden gebruikt, belangrijke voordelen van C++.
C++ 2006-2020
In een artikel gaat de ontwerper van C++, Bjarne Stroustrup, uitgebreid in op de belangrijkste ontwikkelingen van de programmeertaal tussen 2006 en 2020.