La spécification de la nouvelle version du langage C++ (C++17) est finalisée
Quelles sont les nouveautés introduites ?

Le , par LittleWhite, Responsable 2D/3D/Jeux
Le comité de réflexion autour du langage C++ s'est rassemblé une nouvelle fois à Kona (États-Unis) afin de finaliser la nouvelle version du C++. Actuellement, toutes les fonctionnalités sont spécifiées, il ne reste plus que l'approbation à la norme ISO pour que le C++17 soit inscrit dans le marbre. Toutefois, ces derniers correctifs sont mineurs et nous pouvons donc déjà nous pencher sur la nouvelle version.

Au cours du rassemblement et avant la finalisation du langage, un nouveau type a été introduit : std::byte (P0298R3). Ce type a été conçu spécifiquement pour les accès bruts à la mémoire. Jusqu'à présent, les programmeurs utilisaient char ou encore unsigned char qui sont conçus pour représenter avant tout des caractères. En plus, il est possible d'appliquer des opérations arithmétiques sur les char, ce qui ne convient pas. Bref, un nouveau type, pour permettre un code plus clair et plus de sécurité sur les types.

En plus du nouveau type std::byte, le C++17 apporte, entre autres :
  • de nouvelles règles de déduction de types pour le mot clé auto sur les listes d'initialisation (N3922) ;
  • l'ajout de if dans les expressions pouvant être résolues à la compilation (P0128R1) ;
  • la déduction des arguments de template pour les classes templates (P0091R3) ;
  • l'utilisation du mot clé auto pour les templates (P0127R1) ;
  • la garantie sur l'omission de la copie (P0135R0) ;
  • if et switch peuvent procéder à une initialisation if (status_code err = fct(); err != SUCCESS) (P0305R0) ;
  • la garantie forward progress (P0296R0) ;
  • les variables inline (P0386R0) ;
  • les liaisons structurées (« Structured Bindings ») (N4659) ;
  • l'affaiblissement de l'ordre d'évaluation fixe pour les expressions : pour enlever toute ambiguïté sur un code tel que f(i++,i) (P0145R2) ;
  • l'allocation dynamique de mémoire pour les données sur alignées (P0035R4) ;
  • la permission d'imbriquer les espaces de nommage et les énumérations : namespace X::Y { ... } (N4230) ;
  • la permission d'avoir des attributs pour les namespace et énumérations (N4266) ;
  • l'ajout des trois attributs [[fallthrough]], [[nodiscard]] et [[maybe_unused]] (N4640) ;
  • l’ajout du support des caractères littéraux au format Unicode 8 bits (u8) (N4287) ;
  • la permission de ne pas mettre un message dans static_assert (N3928) ;
  • le remplacement de std::uncaught_exception par std::uncaught_exceptions (N4259) ;
  • l'ajout des types std::variant et std::any (N4659 et P0220R1) ;
  • une interface pour les systèmes de fichiers (N3505) ;
  • la parallélisation des algorithmes de la STL (P0024R2) ;
  • les lambdas constexpr (P0170r1) ;
  • la généralisation des boucles sur ensemble (P0184R0) ;
  • expressions de réductions (« fold expressions ») (N4295) ;
  • la capture de *this dans les lambdas (P0018R3) ;
  • les valeurs littérales hexadécimales pour les nombres à virgule flottante (P0245R1) ;
  • résolution d'un manque de précision sur les conversions de qualificatifs pour les pointeurs pointant sur des tableaux de pointeurs (N4261) ;
  • ajout des spécifications d'exceptions au système de typage (P0012R1) ;
  • ajout de __has_include permettant de demande au préprocesseur si un fichier d'entête est disponible (P006R1) ;
  • suppression de l'opérateur ++ pour les booléens (P0002R1) ;
  • la suppression des trigraphs (N4086) ;
  • la suppression du mot-clé register (P0001R1) ;
  • la suppression de std::auto_ptr et std::random_shuffle (N4190) ;
  • ....


Évidemment, le comité continue son travail sur les fonctionnalités qui n'ont pas pu être intégrées dans C++17. Ainsi, on peut espérer les voir dans C++20 :
  • les concepts ;
  • les ranges ;
  • les modules ;
  • le réseau ;
  • les coroutines ;
  • la réflexion ;
  • les graphismes 2D (dans la lignée de cairo).


Du côté des compilateurs, le support complet de C++17 devrait bientôt arriver. Par exemple, GCC7 est en phase de stabilisation et devrait donc être bientôt disponible. De même pour clang 5.

Votre opinion

Avez-vous déjà commencé des développements avec C++17 ? Quelles nouvelles fonctionnalités utilisez-vous ?

Source

L'annonce de Herb Sutter
Les fonctionnalités de C++17


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Lcf.vs Lcf.vs - Membre éprouvé https://www.developpez.com
le 01/04/2017 à 14:40
@LittleWhite: pas cool, de faire des poissons d'avril pareils
Avatar de Michael Guilloux Michael Guilloux - Chroniqueur Actualités https://www.developpez.com
le 04/04/2017 à 13:05
De C++14 à C++17, qu’est-ce qui a changé avec la nouvelle version du langage C++ ?
un document de la Standard C++ Foundation

Comme nous l’avons annoncé il y a quelques jours, la spécification de la nouvelle version du langage C++ (C++17) est désormais finalisée, attendant l'approbation à la norme ISO. Si la publication du prochain standard pour le langage C++ sera faite plus tard cette année, on connait déjà les changements qui ont été opérés par rapport à C++14, le standard actuel.

La Standard C++ Foundation, une organisation chargée de la promotion de standards C++, a donc publié un document qui énumère tous les changements importants introduits depuis la publication de C++14. Le document présente entre autres les fonctionnalités supprimées ou obsolètes, les nouvelles fonctionnalités de base du langage, les nouvelles bibliothèques et les modifications aux fonctionnalités existantes.

Changements officiels de C++14 à C++17

Votre opinion

Pensez-vous que le C++ moderne va dans la bonne direction ou pas ?
Quelle version de C++ utilisez-vous actuellement pour vos développements ?
Avatar de JolyLoic JolyLoic - Rédacteur/Modérateur https://www.developpez.com
le 05/04/2017 à 22:12
Une autre présentation, plus orientée exemples : https://github.com/tvaneerd/cpp17_in.../ALL_IN_ONE.md
Avatar de Abou Dabo Abou Dabo - Candidat au Club https://www.developpez.com
le 08/05/2017 à 11:45
Vraiment ces cool.
D'avoir ajouter certaines fonctionnalités sur ce Langage à Haute Gamme pour les développeurs.
Avatar de Winjerome Winjerome - Expert éminent sénior https://www.developpez.com
le 11/06/2017 à 22:09
Du 15 au 20 mai a eu lieu la BoostCon intitulée « C++Now 2017 » dans laquelle on peut citer :


C++Now 2017: “C++17 Features” par Bryce Lelbach

qui présente de nombreuses nouveautés du langage et de la bibliothèque standard introduites par la norme C++17, ainsi que :


C++Now 2017: “(Ab)using C++17” par Jason Turner

qui montre des exemples d'application.

Retrouvez :

toutes les autres présentations sur la chaîne YouTube BoostCon ;
les slides rattachés sur GitHub ;
la chaîne YouTube de Jason Turner qui publie chaque semaine une courte présentation d'une fonctionnalité (nouvelle ou méconnue) du C++.
Avatar de dourouc05 dourouc05 - Responsable Qt https://www.developpez.com
le 07/09/2017 à 13:03
La norme C++17 approuvée à l'unanimité par le comité
seules quelques modifications typographiques doivent encore être effectuées avant la publication

Même si la finalisation technique date de mars de cette année, C++17 n'est pas au bout de ses peines avant de devenir une norme ISO. Le dernier vote formel du comité vient d'avoir lieu, la norme C++17 vient d'être approuvée à l'unanimité, moyennant vingt-sept commentaires éditoriaux mais aucun commentaire technique.

La prochaine étape est la publication de la norme par l'ISO. Avant, quelques étapes doivent encore se passer :

  • jusqu'en novembre, la prise en compte des commentaires éditoriaux et correction d'autres erreurs typographiques ;
  • début novembre, la réunion à Albuquerque devra entériner ces dernières modifications de forme ;
  • peu après, l'ISO publie la norme ainsi finalisée. Sauf contretemps majeur, elle portera le doux nom de ISO/IEC 14882:2017.


Depuis mars, cependant, il n'y a plus une seule modification technique à la norme (voir ici pour les détails). Tous les efforts se portent sur C++20, qui devrait apporter la notion de concept (enfin !).

Source : C++17 is formally approved.
Avatar de GilbertLatranche GilbertLatranche - Membre averti https://www.developpez.com
le 07/09/2017 à 23:12
Cool, il ne manque plus qu'à ajouter la reflection à C++20 et c'est presque parfait.
Avatar de _Bérenger_ _Bérenger_ - Membre à l'essai https://www.developpez.com
le 08/09/2017 à 9:22
Mouais. Il manque aussi les modules de toute urgence. Je ne sais pas trop où en sont les implémentations de Clang et VS depuis ces deux dernières années, mais il n'y a pas beaucoup de nouvelles. J'ai lu des messages qui rapportaient une accélération de la compilation de 40%... Ce n'est pas négligeable mais c'est loin des x10 dont on avait entendu parlé.
Avatar de Luc Hermitte Luc Hermitte - Expert éminent sénior https://www.developpez.com
le 08/09/2017 à 12:16
C'est toujours les contrats que j'attends avec impatience.
Avatar de JolyLoic JolyLoic - Rédacteur/Modérateur https://www.developpez.com
le 08/09/2017 à 19:09
Citation Envoyé par dourouc05 Voir le message
[B][*]début novembre, la réunion à Albuquerque devra entériner ces dernières modifications de forme ;
En fait, même pas, comme c'est juste éditorial même pas besoin d'approuver quoi que ce soit, ce sera publié en direct dès que les corrections auront été appliquées.
Avatar de JolyLoic JolyLoic - Rédacteur/Modérateur https://www.developpez.com
le 08/09/2017 à 21:57
Citation Envoyé par GilbertLatranche Voir le message
Cool, il ne manque plus qu'à ajouter la reflection à C++20 et c'est presque parfait.
C'est en train d'avancer, assez rapidement même, mais c'est un tellement gros sujet qu'il ne faut pas trop espérer avoir ça en C++20...

Le plan est de fournir une API permettant une réflexion à la compilation (une version plus orientée run-time est aussi nécessaire, mais semble moins prioritaire, et surtout il semble qu'elle puisse s'appuyer sur la version compile-time). Sauf que qui dit réflexion à la compilation dit métaprogrammation pour traiter les infos récupérées ainsi que générer du code à partir de ça. Donc un énorme prérequis à la réflexion en tant que telle...

Quelques papiers intéressants à ce sujet :
- http://www.open-std.org/jtc1/sc22/wg...17/p0633r0.pdf (lors de la réunion de Toronto, il y a eu un très fort consensus pour aller vers des "Homogeneous value syntax" manipulées par des fonctions constexpr. Pour la partie génération de code, tout est moins clair pour l'instant.
- http://www.open-std.org/jtc1/sc22/wg...7/p0578r1.html
- http://www.open-std.org/jtc1/sc22/wg...17/p0385r2.pdf (c'est un assez gros document, mais j'ai particulièrement aimé la partie 5 qui montre comment ces fonctionnalités pourraient être mises en œuvre en pratique).
Avatar de Michael Guilloux Michael Guilloux - Chroniqueur Actualités https://www.developpez.com
le 05/12/2017 à 4:32
C++17 est maintenant officialisé
la norme a été publiée sur le site de l'Organisation internationale de normalisation (ISO)

C++ est un langage de programmation à usage général basé sur le langage de programmation C. Outre les fonctionnalités fournies par le standard C, C++ fournit des types de données, des classes, des templates, des exceptions, des espaces de noms, la surcharge d'opérateurs, des références et des fonctions de bibliothèque supplémentaires, entre autres ajouts au langage C.

C++ est l'un des langages de programmation les plus populaires, avec une grande variété de plateformes matérielles et de systèmes d'exploitation. Le langage C++ est normalisé par l'ISO depuis 1998 avec C++98. Trois mises à jour ont ensuite été publiées en 2003, 2011 et 2014. La dernière, C++17, a été finalisée en mars dernier avant d'être approuvée à l'unanimité par le comité au mois de septembre. Après avoir franchi toutes les étapes, C++17 est maintenant officialisé ; la norme venant d’être publiée sur le site de l'Organisation internationale de normalisation (ISO).

C ++ 17 introduit un certain nombre de nouvelles fonctionnalités de langages. En plus du nouveau type std::byte, il vient avec l’ajout du support des caractères littéraux au format Unicode 8 bits, les variables inline, les expressions de réductions (fold expressions), les liaisons structurées (Structured Bindings), une interface pour les systèmes de fichiers, la parallélisation des algorithmes de la STL, les lambdas constexpr, etc. Il supprime aussi l'opérateur ++ pour les booléens, les trigraphs, le mot clé register, std::auto_ptr et std::random_shuffle. Une liste plus exhaustive des changements peut être trouvée ici.

Du côté des compilateurs, GCC et LLVM/Clang offrent déjà un support complet de C++17, et avec l'officialisation de la norme, le compilateur Clang a été mis à jour pour reconnaitre C++1z en tant que C++17. C++17 est une mise à jour importante du langage de programmation C++. Alors qu'il n'est officialisé que maintenant, les discussions sur son successeur C++20 ont déjà commencé. D'ailleurs dans la prochaine version majeure de GCC attendue début 2018 (GCC 8.1), les développeurs de la collection de compilateurs du projet GNU se préparent pour l'arrivée de C++ 20 / C++2A. En juillet dernier, un patch publié par un développeur GCC a par exemple ajouté un support pour spécifier la nouvelle norme C++ via -std=c++2a pour le travail C++ 20 provisoire et -std=gnu++2a pour C++20 plus les extensions GNU.

Sources : Phoronix, ISO.org

Et vous ?

Qu'en pensez-vous ?
Contacter le responsable de la rubrique C++