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

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


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

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

    Informations forums :
    Inscription : mai 2008
    Messages : 25 588
    Points : 199 302
    Points
    199 302
    Billets dans le blog
    78
    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 averti

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 323
    Points : 428
    Points
    428
    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
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Spleen

    Informations forums :
    Inscription : mai 2013
    Messages : 77
    Points : 81
    Points
    81
    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 : 246
    Points
    246
    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
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Spleen

    Informations forums :
    Inscription : mai 2013
    Messages : 77
    Points : 81
    Points
    81
    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 748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2004
    Messages : 2 748
    Points : 2 654
    Points
    2 654
    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 averti

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 323
    Points : 428
    Points
    428
    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 748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2004
    Messages : 2 748
    Points : 2 654
    Points
    2 654
    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 : 33
    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 137
    Points
    3 137
    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 795
    Points
    2 795
    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 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 460
    Points : 16 076
    Points
    16 076
    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 : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : août 2005
    Messages : 45
    Points : 30
    Points
    30
    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 averti

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 323
    Points : 428
    Points
    428
    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
    25 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2008
    Messages : 25 588
    Points : 199 302
    Points
    199 302
    Billets dans le blog
    78
    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, 12h06
  2. Réponses: 16
    Dernier message: 10/06/2013, 20h17
  3. Réponses: 2
    Dernier message: 04/09/2012, 19h02
  4. Réponses: 2
    Dernier message: 04/09/2012, 19h02
  5. Réponses: 38
    Dernier message: 08/07/2010, 11h31

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