C++23 : Le nouveau standard C++ est prêt

C++23 : Le nouveau standard C++ est prêt

2023-07-10 09:58:00

Bien que C++23, en tant que prochaine norme C++, améliore considérablement le langage de programmation, il est moins révolutionnaire que C++98, C++11 ou C++20. La nouvelle norme est plus dans la tradition de C++17.

Publicité


Rainer Grimm travaille depuis de nombreuses années en tant qu’architecte logiciel, chef d’équipe et responsable de la formation. Il aime écrire des articles sur les langages de programmation C++, Python et Haskell, mais aime aussi intervenir fréquemment lors de conférences spécialisées. Sur son blog Modernes C++, il traite intensément de sa passion pour le C++.



À la fin des années 1980, il existait plusieurs implémentations C++ indépendantes. C’est pourquoi Bjarne Stroustrup et Margaret A. Ellis dans leur livre de 1989 “Le manuel de référence C++ annoté” (ARM C++) a défini la gamme de fonctions de C++. En outre, ARM C++ a rempli une deuxième tâche importante. Il a constitué la base de la première norme ISO C++ ISO/IEC 14882:1998 (C++98). C+ + 98 possède des fonctionnalités très importantes : les modèles, la bibliothèque de modèles standard (STL) avec ses conteneurs et ses algorithmes, les chaînes et les flux d’E/S.

Avec C++03 (ISO/IEC 14882:2003), C++98 a reçu une correction technique tellement marginale que je ne l’inclus pas dans ma chronologie. Dans la communauté, C++03, qui inclut C++98, est simplement appelé Legacy C++.

Publicité

Bien qu’il ne s’agisse pas d’une norme officielle, le rapport technique 1 (TR1) décrit de nombreux composants qui ont été inclus dans la norme officielle C++11. Les nouvelles bibliothèques d’expressions régulières, de pointeurs intelligents, de tables de hachage ou de générateurs de nombres aléatoires sont toutes basées sur TR1 et donc sur les bibliothèques Boost correspondantes. Le booster le projet, fondé par des membres du comité de normalisation C++, est le véritable groupe de réflexion sur les extensions actuelles de la bibliothèque C++. TR1 contenait 13 bibliothèques. Seules les fonctions mathématiques spéciales ont dû attendre C++17.

C++11 représente la prochaine norme C++. Nous l’appelons simplement C++ moderne. Ce nom signifie également C++14 et C++17. C++11 possède de nombreuses fonctionnalités qui changent fondamentalement la façon dont nous programmons C++. Par exemple, C++11 contient les composants TR1, mais aussi la sémantique de déplacement, le transfert parfait, les modèles variadiques, les lambdas ou constexpr. Ce n’est pas tout : avec C++11, C++ a un modèle de mémoire comme base fondamentale de la concurrence et une interface multithreading. Au cas où vous seriez curieux, voici mes articles sur modèle de mémoire et à Multithreading.

C++14 est une norme mineure. Avec cela, des verrous de lecture-écriture, des lambdas généralisés et des fonctions constexpr généralisées ont été ajoutés à C++.

C++17 n’est ni grand ni petit. Cette norme a deux caractéristiques exceptionnelles : la STL parallèle et la bibliothèque de système de fichiers. Plus de 80 algorithmes STL peuvent désormais être exécutés avec ce que l’on appelle une politique d’exécution. C’est-à-dire un appel au formulaire std::sort(std::execute::par, vec.begin(), vec.end()) est un indice pour l’implémentation C++ pour trier en parallèle. De plus, vous pouvez spécifier si le tri doit être séquentiel (std::execute::seq) ou vectorisé (std::execute::par_unseq) doit être exécuté. Correspondant au C++11, Boost a eu une très forte influence sur ce standard C++. Boost a ajouté un système de fichiers et les nouveaux types de données à C++ std::optional, std::variant et std::any. Ce sont aussi mes articles C++17.

C++20 change fondamentalement la façon dont nous programmons C++, similaire à C++11. Cela est particulièrement vrai pour les quatre grands : gammes, coroutines, concepts et modules.

La bibliothèque de plages permet aux algorithmes de la bibliothèque de modèles standard d’être appliqués directement au conteneur, d’être définis sur des flux de données infinis et d’être liés à l’opérateur pipe connu du shell Unix.

C++20 prend en charge la programmation asynchrone avec des coroutines. De cette manière, le multitâche coopératif, les flux de données infinis, les boucles d’événements et les pipelines peuvent être élégamment implémentés en C++20.

Les concepts sont une extension des modèles C++ qui peuvent être utilisés pour définir des catégories sémantiques pour l’ensemble des types de données autorisés. Grâce à Concepts, appliquer et définir des modèles est beaucoup plus facile et plus expressif.

Les modules constituent une amélioration significative par rapport aux fichiers d’en-tête et promettent de nombreuses améliorations : éliminez les instructions de préprocesseur (macros), obtenez de meilleurs temps de compilation et compressez plus facilement.

Mes articles sur Gammes, Coroutines, Notions, Module et C++20.

Actuellement (juillet 2023), le contenu de C++23 est terminé et doit être approuvé définitivement.

Avec Deducing This, C++23 offre une extension de langage de base petite mais très efficace. L’innovation permet, comme Python, le passage implicite this– Rendez les pointeurs explicites dans une définition de fonction membre. Grâce à Deducing This, certaines techniques complexes en C++ comme le CRTP (Curiously Recurring Template Pattern) ou le Overload Pattern deviennent un jeu d’enfant.

La bibliothèque C++23 verra de nombreux ajouts importants. Ainsi, la bibliothèque standard peut être utilisée directement avec import std; import ou la spécification du format C++20 directement dans std::print et std::println utiliser. De plus, pour des raisons de performances, nous obtenons des conteneurs associatifs plats comme std::flat_map.Ce dernier peut être utilisé à la place de std::map insérer. L’interface std::optional est étendu par une interface monadique pour des raisons de composibilité. Le nouveau type de données std::expected a déjà une interface composable et peut stocker une valeur attendue ou inattendue pour la gestion des erreurs. Grâce à std::mdspan nous obtenons une étendue multidimensionnelle. Enfin est std::generator la première coroutine concrète pour générer un flux de nombres. std::generator fait partie de la bibliothèque ranges, qui est considérablement étendue en C++23.

Dans mon prochain article, je commencerai mon voyage à travers C++23 avec Deducing This. Il s’agit d’une petite mais significative amélioration en C++.



Je suis heureux de vous présenter mes programmes de mentorat en une heure

Faits

  • Quand : 12 juillet 2023, de 9h00 à 10h00 (CET ; UTC +02:00)
  • Inscrivez-vous à la présentation : Abonnez-vous par e-mail
  • Obtenez votre lien d’invitation : 11 juillet


(rme)

Vers la page d’accueil



#C23 #nouveau #standard #est #prêt
1689158839

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.