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

4 kommentarer.  Hop til debatten
Ny C++ byder på moduler, corutiner og koncepter
Illustration: Bigstock.
Væsentlige nyheder i det gamle sprog.
30. juli 2019 kl. 10:22
errorÆldre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

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.

Artiklen fortsætter efter annoncen

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:

  1. 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:

  1. // math.cppm
  2.  
  3. export module mod1;
  4.  
  5. export int identity(int arg) {
  6. return arg;
  7. }
  8.  
  9. // main.cpp
  10.  
  11. import mod1;
  12.  
  13. int main() {
  14. identity(100);
  15. }

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.

Artiklen fortsætter efter annoncen

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:

  1. generator<int> iota(int n = 0) {
  2. while(true)
  3. co_yield n++;
  4. }

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.

4 kommentarer.  Hop til debatten
Debatten
Log ind for at deltage i debatten.
settingsDebatindstillinger
4
2. august 2019 kl. 02:00

Jvf. "Læs også" #2, ville Bjarne Stroustrup sige det samme om det endelige resultat?

3
Journalist -
30. juli 2019 kl. 22:33
Journalist

Det står der nu heller ikke i artiklen. Det er nyt i den nye C++, og dermed nyt i denne forstand. Men en hulens masse sprog har efterhånden corutiner indbygget, som der også står ovenfor.

Mvh Tania/V2

2
30. juli 2019 kl. 22:12

Conway opfandt dem i 1958...

Det nye er at de såkaldte "højniveausprog" endelig er ved at have compilere der kan kapere dem...

1
30. juli 2019 kl. 19:37

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.