IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

GCC 4.9.0 est disponible et dispose d'un meilleur support de C++11 et C++14


Sujet :

C++

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut GCC 4.9.0 est disponible et dispose d'un meilleur support de C++11 et C++14
    GCC 4.9.0 est disponible et dispose d'un meilleur support de C++11 et C++14

    La nouvelle version de GCC arrive et nous propose de nombreuses améliorations liées au support du C++11 et du C++14. Un des ajouts les plus importants est le support des expressions régulières à travers std::regex.

    De plus, l'implémentation de la déduction du type de retour a été mise à jour pour correspondre à la norme N3638. Plus précisément, cela permet d'utiliser decltype(auto) à la place du auto seul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int& f();
    auto  i1 = f(); // int
    decltype(auto) i2 = f(); // int&
    G++ supporte maintenant la capture des listes d'initialisations dans les lambda :
    Le support des tableaux à taille variable définis dans le C++1y. Ce support existait depuis de nombreuses années à travers la norme GNU/C99, mais maintenant, ces tableaux supportent aussi les listes d'initialisations et la capture par référence par une expression lambda. Avec le mode C++1y, G++ indiquera une erreur pour les usages interdits par le standard, notamment la création d'un pointeur ou l'application de sizeof() sur de tels tableaux.
    Toutefois, il faut savoir que les tableaux à taille variable n'apparaîtront peut être pas dans C++14, mais seront intégrés dans un document à part et peut être dans C++17.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void f(int n) {
      int a[n] = { 1, 2, 3 }; // envoie std::bad_array_length si n < 3
      [&a]{ for (int i : a) { cout << i << endl; } }();
      &a; // erreur, accès à l'adresse d'un tableau à taille variable
    }
    G++ supporte l'attribut [[deprecated]] (module les bogues de [[gnu::deprecated]]. Les classes et les fonctions peuvent ainsi être marquées dépréciées et faire apparaître un message additionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class A;
    int bar(int n);
    #if __cplusplus > 201103
    class [[deprecated("A is deprecated in C++14; Use B instead")]] A;
    [[deprecated("bar is unsafe; use foo() instead")]]
    int bar(int n);
     
    int foo(int n);
    class B;
    #endif
    A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
    int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use foo() instead
    Le support d'un séparateur entre les chiffres a été ajouté. Les nombres peuvent ainsi être plus lisibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i = 1048576;
    int j = 1'048'576;
    int k =0x10'0000;
    int m = 0'004'000'000;
    int n = 0b0001'0000'0000'0000'0000'0000;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double x = 1.602'176'565e-19;
    double y = 1.602'176'565e-1'9;
    G++ supporte les lambdas polymorphiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // un objet fonctionnel qui incrémente n'importe quel type
    auto incr = [](auto x) { return x++; };
    Finalement, de nombreuses améliorations ont été effectuées pour supporter le nouveau standard C++14 :
    • correction des fonctions membres constexpr sans const ;
    • implémentation de la fonction std::exchange() ;
    • adressage des tuples par le type ;
    • implémentation de std::make_unique ;
    • implémentation de std::shared_lock ;
    • std::result_of respecte SFINAE ;
    • ajout de l'opérateur () à integral_constant ;
    • ajout d'expressions définies par l'utilisateur pour les types de la bibliothèque standard std::basic_string, std::chrono::duration et std::complex ;
    • ajout de manipulateurs E/S pour les chaînes de caractères entre guillemets ;
    • ajout de membres constexpr à <utility>, <complex>, <chrono> et quelques conteneurs ;
    • ajout de std::integer_sequence traité au moment de la compilation ;
    • ajout de traits de transformation plus propres ;
    • modification des foncteurs de <functional> plus faciles à utiliser et plus génériques.


    G++ embarque maintenant une implémentation de std::experimental::optional et std::experimental::string_view.

    La fonction std::copy_exception est maintenant dépréciée et sera supprimée dans la prochaine version. Vous devez utiliser std::make_exception_ptr à la place.


    Votre opinion

    Utilisez-vous GCC ? Pourquoi le préférez-vous aux autres compilateurs ?


    Source

    Modifications de la version 4.9
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    C'est std::experimental::optional c'est corrigé, merci.

    Précision, pour activer le support de C++1y : -std=c++1y

  3. #3
    Membre régulier
    Profil pro
    Spleen
    Inscrit en
    Mai 2013
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Spleen

    Informations forums :
    Inscription : Mai 2013
    Messages : 78
    Points : 89
    Points
    89
    Par défaut
    Et l'implémentation d'OpenMP dans gcc4.9 ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Points : 251
    Points
    251
    Par défaut
    gcc 4.9 implémente désormais la quasi intégralité de la norme OpenMP 4.0. Plus de détails ici.

  5. #5
    Membre régulier
    Profil pro
    Spleen
    Inscrit en
    Mai 2013
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Spleen

    Informations forums :
    Inscription : Mai 2013
    Messages : 78
    Points : 89
    Points
    89
    Par défaut
    Oui je trouvais ça dommage de pas en parler...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    [[deprecated]] et les séparateurs de chiffres, c'est du C++1y ?

    Si non, il serait bien de clairement séparer ce qui relève de la norme du reste.

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    A part std::regex, tout le reste est C++1y

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    OK, merci !

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Points : 97
    Points
    97
    Par défaut
    Utilisez-vous GCC ?
    Oui*

    Pourquoi le préférez-vous aux autres compilateurs ?
    1) Respect des derniers standards (seul clang semble faire mieux sur ce point)
    2) Ne force pas la lourde mise à jour d'un environnement de développement intégré (Visual Studio?)
    3) Nombreuses plateformes supportées (clang?)

    *HS:
    Je devrais passer de GCC 4.8 à GCC 4.9 cette semaine. J'attendais avec impatience la 4.9
    Malheureusement en entreprise, il est souvent difficile de faire évoluer les choses rapidement. Exemple: dans ma boite, on est parti pour livrer des systèmes sous windows xp pour encore quelques années sans que ca ne choque personne. Bref, tant que j'entendrais parler de "C/C++" au boulot j'aurais du mal à vendre du "C++11" et au delà...

    J'ai une petite question : qui utilise du code compilé en C++11 en entreprise??

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Utilisez-vous GCC ?

    Oui

    Pourquoi le préférez-vous aux autres compilateurs ?

    Je lui préfère Clang, que j'utilise également. J'utilise aussi GCC car:
    - Pas de raison de prendre le risque de basculer la prod en version compilée avec Clang sans apporter la preuve qu'il y a un gain conséquent (les benchmarks sont peu parlants : aucun des deux compilo ne bat l'autre de manière systématique, cela dépend des applications).
    - C'est bien de faire passer son code dans deux compilateurs pour valider un minimum la portabilité du code.

    Citation Envoyé par iNaKoll Voir le message
    J'ai une petite question : qui utilise du code compilé en C++11 en entreprise??
    Moi. Mais je sais comme ça peut être compliqué dans certaines boîtes, j'ai la chance de bosser sur un projet qui nous permet ce type d'évolutions.
    Find me on github

  11. #11
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Citation Envoyé par iNaKoll Voir le message
    Utilisez-vous GCC ?
    J'ai une petite question : qui utilise du code compilé en C++11 en entreprise??
    Moi. Et je pense ne pas être le seul .

    La cible étant linux, le compilo utilisé gcc 4.7, aucune raison de se priver, surtout quand on a la chance de partir sans un historique monstrueux. Je me suis juste pris dans les dents le non-support désastreux des regex (qui n’auraient jamais dû être publié en l’état).

    Sinon, je retiens surtout de ces changements :
    - make_unique (enfin !)
    - es regex, histoire d’éviter des dépendances à boost ou qt
    - l’attribut deprecated

    Le reste me laisse plus circonspect (notamment les tableaux de taille variable qui ont l’air cool mais ne servent jamais).

  12. #12
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par iNaKoll Voir le message
    J'ai une petite question : qui utilise du code compilé en C++11 en entreprise??
    Moi, partiellement. J'utilise le sous ensemble supporté par visual studio 2012, et milite activement pour le passage à visual studio 2013 (on fait un logiciel 100% windows, donc gcc n'est pas trop une option comme compilo principal).
    Citation Envoyé par white_tentacle Voir le message
    Le reste me laisse plus circonspect (notamment les tableaux de taille variable qui ont l’air cool mais ne servent jamais).
    Il peuvent permettre certaines optimisations, mais effectivement, pour moi, ce n'est à utiliser qu'après preuve que le gain de perfs est là.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Petite demande d'info : on parle principalement dans cet article de g++, mais les modifications standard s'appliquent-elles également au C ?
    Notamment, pour ce qui m'intéresse : le support de [[deprecated]] (qui est explicitement lié à g++ dans l'article) et des séparateurs de nombres (qui est normalement indépendant du fait que l'on soit en C ou en C++)

    Merci

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    Ce ne sont pas des fonctionnalités associées à GCC (et donc indépendantes du langage), mais des ajouts dans la norme du C++.
    Si la dernière norme du C (le C11) n'inclut pas ces fonctionnalités, elles ne seront pas probablement pas disponibles dans GCC. A voir dans la norme du C et dans les changes log de GCC (cf le lien donné par LittleWhite)
    Mais a priori, ce n'est pas dans GCC 4.9

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut GCC 4.9.1 arrive et ajoute le support d'OpenMP 4 pour le Fortran
    GCC 4.9.1 arrive et ajoute le support d'OpenMP 4 pour le Fortran

    La nouvelle version de la branche 4.9 de GCC arrive et nous propose l'intégration de OpenMP 4, pour les compilateurs C, C++ et Fortran.

    L'option -fopenmp-simd permet d'utiliser les directives SIMD de OpenMP en place des autres directives. L'option -fsimd-cost-model= permet quant à elle de choisir le modèle du coût de la vectorisation pour les boucles annotées avec les directives SIMD. Finalement -Wopenmp-simd avertit lorsque le modèle de coût surcharge les directives SIMD définies par l'utilisateur.

    Sinon, cette mise à jour étant une mise à jour mineure, elle est accompagnée de son lot de corrections de bogues et de minimes améliorations.

    Télécharger GCC

    Consulter les notes de version
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Le compilateur GCC 5.1 est disponible !
    Par LittleWhite dans le forum Actualités
    Réponses: 8
    Dernier message: 07/12/2015, 11h06
  2. Réponses: 16
    Dernier message: 10/06/2013, 19h17
  3. Réponses: 2
    Dernier message: 04/09/2012, 18h02
  4. Réponses: 2
    Dernier message: 04/09/2012, 18h02
  5. Réponses: 38
    Dernier message: 08/07/2010, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo