Les fonctionnalités de C++20 sont définies

Par:
fredericmazue

mar, 26/02/2019 - 16:00

Après une réunion parmi les plus grandes en 29 ans d'histoire, le comité ISO C++ a figé les fonctionnalités de C++20 nous apprend un billet d'Herb Sutter, gourou du C++.

Selon Herb Sutter, les deux fonctionnalités les plus importantes du standard C++20 sont les modules et les coroutines. Les modules constituent une nouvelle alternative aux fichiers d’en-tête qui apporte un certain nombre d’améliorations clés, notamment en isolant les effets des macros et en permettant des compilations évolutives, explique Herb qui ajoute qu'en 35 ans c'est première fois que C ++ ajoute une nouvelle fonctionnalité permettant aux utilisateurs de définir une limite d’encapsulation nommée.

Les coroutines sont elles aussi une fonctionnalité à remarquer. Une coroutine est une unité de traitement qui s'apparente à une fonction (ou routine) avec cette différence que si une sortie du corps d'une fonction met fin à l'exécution de celle-ci, la sortie de la coroutine suspend seulement son traitement qui peut ensuite reprendre, l'état du traitement à la sortie étant conservée. Une coroutine peut être vue comme un morceau de programme qui conserve son état, mais qui n'a pas de thread d'exécution. Les coroutines peuvent notamment être utilisées pour des itérateurs et des générateurs.

Par exemple, soit une coroutine en pseudo code :

function Generator() {
  for (i = 0 to 100)
    produce i

Cette coroutine peut être implémentée et utilisée comme ceci en C++20

#include <iostream>

template <typename T>
generator<int> range(T first, T last)
{
  while (first != last)
  {
    co_yield first++;
  }
}


int main()
{
  for (int i : range(0, 100))
  {
    std::cout << i << std::endl;
  }
  return 0;
}

Les coroutines ne se résument pas à un simple générateur. Il est possible d'attendre une coroutine dans une coroutine avec l'instruction co_yield, ce qui permet de définir une logique entre plusieurs coroutines.

Le premier brouillon (draft) de la spécification C++20 doit être publié en juillet 2019. GCC à partir de sa version 8.1 et Visual Studio 2019 propose déjà un premier support expérimental de C++20.