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

GCC Discussion :

Qu'attendre de GCC 6 en C++ ?


Sujet :

GCC

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut Qu'attendre de GCC 6 en C++ ?
    Avec le nouveau cycle de GCC, la prochaine version majeure sera numérotée 6 et sera la première à apporter des nouveautés par rapport à GCC 5, sorti en avril dernier dans sa première version finale (5.1). La principale nouveauté concerne la norme C++ par défaut : adieu C++98, GCC s’ouvre maintenant au vingt et unième siècle en activant C++14 par défaut ! Il est toujours possible de compiler son code en C++98 ou C++11 avec l’option de compilation adéquate (std=c++11, par exemple).

    Toujours au niveau des normes, quelques points qui devraient faire partie de la prochaine révision de C++, en 2017, sont déjà implémentés (et accessibles par l’option std=c++1z). Cette révision n’étant pas achevée, toutes ces fonctionnalités sont marquées comme expérimentales. La principale est nommée concepts : il s’agit d’une extension du système de templates du langage pour inclure des garanties formelles ; par exemple, pour imposer que le type paramétré T d’une fonction puisse être comparé, on pourrait écrire ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template<typename T> requires LessThanComparable<T>
    const T& min(const T &x, const T &y) {
        return (y < x) ? y : x;
    }
     
    auto concept LessThanComparable<typename T> {
        bool operator<(T, T);
    }
    Grâce à ces concepts, le compilateur pourrait fournir des messages d’erreur beaucoup plus explicites qu’actuellement ; ils pourraient être utilisés par les outils d’analyse statique du code pour des diagnostics plus précis ou encore guider l’optimisation du compilateur. Initialement, ces concepts étaient prévus pour C++11, mais n’étaient pas encore estimés suffisamment prêts alors. Au niveau de la bibliothèque standard C++17, les extensions proposées pour la gestion des fichiers et une série de fonctions estimées de base sont implémentées.

    Architectures

    Pour ARM64, le compilateur peut maintenant déterminer le processeur utilisé et optimiser au mieux pour ce compilateur, sans nécessiter de paramètre particulier pour march et compagnie. Aussi, l’optimisation lors de l’édition des liens fonctionne sur plusieurs unités de compilation.

    Sur les processeurs Intel, les extensions de protection de la mémoire (MPX) sont maintenant activées par défaut : ces instructions des processeurs de génération Skylake sont prévues pour augmenter la sécurité lors de l’exécution avec une vérification matérielle des références des pointeurs. Sur ces mêmes processeurs (gamme Xeon uniquement), pour la performance, les extensions AVX-512 sont maintenant gérées : elles servent à exécuter des opérations mathématiques sur des vecteurs de cinq cent douze bits d’un coup (plutôt que d’effectuer une série d’instructions les unes à la suite des autres), ce qui a un impact principalement sur le code scientifique.

    Côté AMD, les processeurs de la famille Zen, qui devraient débarquer à la fin de l’année, sont déjà gérés.

    OpenMP est une norme prévue pour aider à paralléliser du code source C, C++ et Fortran. La nouvelle version 4.5 de la norme est complètement implémentée pour les compilateurs C et C++.

    Diagnostics du compilateur

    Une nouvelle option, -fsanitize=bounds-strict, effectue des vérifications plus poussées et plus strictes au niveau des bornes des tableaux lors des appels.

    Cependant, le nouvel avertissement qui a fait le plus de bruit concerne l’indentation : par exemple, si un bout de code marque par son indentation qu’il devrait dépendre d’une condition… mais si la syntaxe utilisée montre le contraire, le compilateur donnera un avertissement. Il a déjà montré ses effets positifs pour une partie des elfutils : Mark Wielard a pu corriger un défaut « gênant » dans le code. Il doit cependant être activé séparément avec le paramètre -Wmisleading-indentation.

    Ce type d’erreur a déjà mené à des failles de sécurité, notamment chez Apple, où une fonction retournait sa valeur avant d’avoir effectué tous les tests de sécurité nécessaires. Encore une fois, l’indentation indiquait que le code était correct… alors que le retour se faisait sans la moindre condition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static OSStatus
    SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
                                     uint8_t *signature, UInt16 signatureLen)
    {
        OSStatus        err;
        …
     
        if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
            goto fail;
        if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
            goto fail;
            goto fail;
        if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
            goto fail;
        …
     
    fail:
        SSLFreeBuffer(&signedHashes);
        SSLFreeBuffer(&hashCtx);
        return err;
    }

    Cependant, pas mal d’utilisateurs craignent que ce nouveau type d’avertissements ne crée un grand nombre de faux positifs — c’est d’ailleurs pour cette raison qu’il n’est pas activé par défaut.


    GCC 6.1, la première version stable de GCC 6, devrait arriver aux alentours de mars ou avril. Il devrait être le compilateur par défaut pour Fedora 24, dont la sortie devrait être retardée jusque juin pour laisser le temps de recompiler tous les paquets avec cette nouvelle version de GCC.


    Sources : GCC 6 Release Series, C++1z Support in GCC, libstdc++ status, Among The Changes/Features Coming For GCC 6, GCC 6 To Enable Intel’s MPX Library By Default, GCC 6 Will Warn You About Misleading Code Indentations, Apple’s SSL/TLS bug, Fedora 24 Will Likely Be Delayed.

    Et vous ?

    Qu'en pensez-vous ?

    Voir aussi

    Forum GCC


    Ce contenu a été publié dans C++ par dourouc05.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    La principale est nommée concepts : il s’agit d’une extension du système de templates du langage pour inclure des garanties formelles ; par exemple, pour imposer que le type paramétré T d’une fonction puisse être comparé, on pourrait écrire ce bout de code : ...
    Whaou !!!
    À ce rythme là on aura la même expressivité que Haskell... dans deux siècles.

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    C'est pas con cette histoire d'avertissements sur l'indentation. Je trouve particulièrement astucieux que cette nouvelle version du compilateur soit capable de tenir compte de l'intention du développeur dans quelque chose qui a plus trait au style de codage qu'au code lui-même.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Belgique

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2015
    Messages : 26
    Points : 35
    Points
    35
    Par défaut
    Aura-t-on enfin droit à une implémentation du multithreading sur Windows ?

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 442
    Points : 43 086
    Points
    43 086
    Par défaut
    Pour du C simple, compiler en C++14 aura t'il des conséquences ? N'étant pas développeur, je ne connais même pas les apports des versions.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/11/2002, 14h15
  2. Réponses: 1
    Dernier message: 14/11/2002, 00h09
  3. Réponses: 1
    Dernier message: 13/11/2002, 20h34
  4. [VB6] attendre un événement pour continuer l'exécution
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 12/11/2002, 13h08
  5. [Kylix] gcc et kylix
    Par alexsmadja dans le forum EDI
    Réponses: 1
    Dernier message: 28/05/2002, 10h00

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