Ny C++ byder på moduler, corutiner og koncepter

Illustration: Bigstock
Væsentlige nyheder i det gamle sprog.

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.

Læs også: Microsoft: Rust kan løse hukommelsesproblemer i C og C++

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.

Læs også: Bjarne Stroustrup kalder nye C++-faciliteter for sindssyge

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.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (4)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Ivan Skytte Jørgensen

Personligt finder jeg std::chrono::tzdb det mest nyttige - endelige kan man slippe for gmtime/localtime/timegm/mktime/... som ikke er trådsikre, kun kan håndtere een timezone osv.

Ikke at kode som håndtere tidzoner bliver lettere - men nu er det i det mindste muligt at lave med et standardlibrary.

Log ind eller Opret konto for at kommentere