Komiteen bag C++ har fastfrosset de faciliteter, der skal med i den næste udgave af sproget, som hedder C++ 20. Det skriver udviklerbloggen Infoq.
C++ 20 er en væsentlig revision af sproget, hvor moduler, coroutiner og såkaldte koncepter er blandt de vigtigste nyheder.
Sproget standardiseres af den internationale standardiseringsorganisation ISO. På sit seneste møde i Köln vedtog C++-komiteen de sidste ændringer af C++ 20-udkastet, inden den forelagde det for de nationale standardorganer for at indsamle feedback.
Blandt de nyeste tilføjelser er biblioteket std::format
til tekstformatering, et nyt biblioteket til synkronisering og nemmere udvikling af flertråede programmer. Kontrakter, som det kendes fra Eiffel og handler om strengere guards ved funktionskald, kom ikke med i denne omgang, men udsættes til en kommende version af sproget.
C++ 20 introducerer et nyt api til tekstformatering, std::format
, som skal være lige så fleksibel som printf
, men med en mere naturlig stil samt separation af meddelelse og parametre, som i:
string message = format("The answer is {}.", 42);
C++ 20 vil også gøre synkronisering og koordination af tråde nemmere, med flere faciliteter til dette formål, såsom låsefri heltalstyper.
Moduler
Moduler er en ny facilitet, som berører andre behov end dem, som namespaces har med at gøre. Det gør det muligt at strukturere store kodebaser i logiske dele, uden at adskille header- og kildefiler.
Således kan man definere et simpelt modul, der eksporterer en funktion og dens anvendelse i en anden fil:
// math.cppm export module mod1; export int identity(int arg) { return arg; } // main.cpp import mod1; int main() { identity(100); }
Corutiner
Corutiner er en anden nyhed, som snart sagt er implementeret i alle populære sprog. Det er funktioner, som kan stoppes og forsættes på et senere tidspunkt. De er uden stak, hvilket vil sige, at de returnerer til kaldet efter suspendering.
Corotiner understøtter tre nye operatorer: co_await
, til at afbryde udførelsen uden at returnere en værdi til kaldet, co_yield
til at suspendere og returnere en værdi, samt co_return
som afslutter udførelsen og returnerer en værdi.
Disse tre operatorer gør det muligt at skabe asynkrone opgaver, generatorer og 'lazy' funktioner. Det følgende er et eksempel på generator:
generator<int> iota(int n = 0) { while(true) co_yield n++; }
Koncepter
En anden ny funktion i C++ 20 er såkaldte koncepter, der danner grundlaget for at ræsonnere om ligheder. Det kan benyttes til af tjekke template-parametre ved kompilering og dispatche funktionskald på baggrund af typeegenskaber.
Der er mere information fra ISO-komiteen om den nye udgave på Reddit.

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.