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 :

GCC : la version 7.3 du compilateur libre est disponible


Sujet :

GCC

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 679
    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 679
    Points : 188 770
    Points
    188 770
    Par défaut GCC : la version 7.3 du compilateur libre est disponible
    La nouvelle version du compilateur libre GCC vient de sortir. Selon la nouvelle convention de numérotation, son numéro de version est 7.1, pour la première version stable de la branche GCC 7. Elle marque le trentième anniversaire du compilateur GCC limité au langage C, qui a depuis lors évolué comme une suite de compilateurs pour une flopée de langages : Ada, C, C++, Fortran, Go.
    C++17

    Parmi les nouveautés concernant C++, on peut noter une gestion expérimentale de l’entièreté de la norme C++17. Il faut encore l’activer manuellement lors de la compilation (avec l’option -std=c++1z), au moins jusqu’à la publication de la version finale de la norme. Les progrès par rapport à GCC 6 sont notables, comme montré dans le tableau ci-dessous. Néanmoins, la bibliothèque standard n’est pas encore à ce niveau d’implémentation.

    [[fallthrough]] attribute P0188R1 __has_cpp_attribute(fallthrough)
    Extension to aggregate initialization P0017R1 __cpp_aggregate_bases >= 201603
    Wording for constexpr lambda P0170R1 __cpp_constexpr >= 201603
    Lambda capture of *this by Value P0018R3 __cpp_capture_star_this >= 201603
    Construction Rules for enum class variables P0138R2
    Dynamic memory allocation for over-aligned data P0035R4 __cpp_aligned_new >= 201606
    Guaranteed copy elision P0135R1
    Refining Expression Evaluation Order for Idiomatic C++ P0145R3
    constexpr if P0292R2 __cpp_if_constexpr >= 201606
    Selection statements with initializer P0305R1
    Template argument deduction for class templates P0091R3 __cpp_deduction_guides >= 201606
    Declaring non-type template parameters with auto P0127R2 __cpp_template_auto >= 201606
    Using attribute namespaces without repetition P0028R4
    Structured bindings P0217R3 __cpp_structured_bindings >= 201606
    Remove Deprecated Use of the register Keyword P0001R1
    Remove Deprecated operator++(bool) P0002R1
    Make exception specifications be part of the type system P0012R1 __cpp_noexcept_function_type >= 201510
    Rewording inheriting constructors (core issue 1941 et al) P0136R1 __cpp_inheriting_constructors >= 201511
    Inline variables P0386R2 __cpp_inline_variables >= 201606
    DR 150, Matching of template template arguments P0522R0 __cpp_template_template_args >= 201611
    Removing dynamic exception specifications P0003R5
    Pack expansions in using-declarations P0195R2 __cpp_variadic_using >= 201611
    A byte type definition P0298R0

    Diagnostics C et C++

    Les diagnostics pour le code C et C++ ont été encore largement améliorés : GCC 6 apportait bon nombre d’améliorations, cette nouvelle itération continue le travail. Principalement, le compilateur propose des corrections pour les fautes de frappe, que ce soit des membres de structures, des fonctions, des macros, des énumérations ou des types.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did you mean 'color'?
       return ptr->colour;
                   ^~~~~~
                   color
    De même, le préprocesseur propose des corrections pour les directives mal écrites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    test.c:5:2: error: invalid preprocessing directive #endfi; did you mean #endif?
     #endfi
      ^~~~~
      endif
    Les chaînes de formattage (utilisées par printf et compagnie) ont aussi droit à des propositions de corrections :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    test.c:51:29: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Wformat=]
       printf ("foo: %d  bar: %s baz: %d", 100, i + j, 102);
                              ~^                ~~~~~
                              %d
    En C++, plus spécifiquement, certains points-virgules manquants sont signalés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    test.cc:4:11: error: expected ';' after class definition
     class a {} 
               ^
               ;
    Au niveau de la sécurité, bon nombre de nouveaux messages permettent de détecter les risques de dépassement de capacité et d’autres formes d’accès invalides à la mémoire. Par exemple, des appels à malloc() avec une taille de mémoire négative donne un avertissement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void* f (int n)
    {
      return malloc (n > 0 ? 0 : n);
    }
     
    warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2147483647 [-Walloc-size-larger-than=]
    De même, certaines failles potentielles lors de l’utilisation de fonctions de la famille printf sont détectées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void* f (int mday)
    {
      char *buf = malloc (3);
      sprintf (buf, "%02i", mday % 100);
      return buf;
    }
    
    warning: 'sprintf may write a terminating nul past the end of the destination [-Wformat-overflow=]
    note: 'sprintf' output between 3 and 4 bytes into a destination of size 3
    Optimisation du code

    GCC 7 apporte bon nombre de nouvelles passes d’optimisation du code. Par exemple, certains appels à sprintf peuvent être remplacés par des constantes, la taille de leur sortie peut être estimée (avec des bornes supérieures et inférieures). Les opérations d’écriture en mémoire sont rassemblées, afin d’effectuer moins d’instructions, chacune copiant plus de données.

    Les passes interprocédurales peuvent analyser les bits des variables forcément à zéro (ce qui inclut l’alignement des pointeurs, déjà disponible avec GCC 6) et donner l’information aux autres passes. Pour les variables entières, les bornes sur les valeurs sont transmises aux autres algorithmes d’optimisation.

    Certaines boucles ont la particularité d’avoir une condition toujours vraie pour une partie des itérations puis fausse pour les suivantes. Dans ce cas, GCC 7 peut séparer la boucle en deux parties, de telle sorte que la condition ne doit plus être vérifiée.

    Calcul de haute performance

    OpenMP est une série d’annotations pour le code C, C++ et Fortran qui indique au compilateur comment le paralléliser. GCC 6 implémentait la version 4.5 de la norme pour C et C++, GCC 7 l’apporte à Fortran, avec l’exception de la correspondance des éléments de structure.

    GCC peut maintenant produire des exécutables au format BRIG 1.0. Il est utilisé dans le cadre de la plateforme AMD HSA. L’objectif est de déporter facilement du code OpenMP sur n’importe quel type d’accélérateur, comme un GPU, ce qui est défini depuis OpenMP 4.

    NVIDIA n’est pas en reste, GCC peut maintenant produire des binaires au format NVPTX, utilisé sur les cartes graphiques de la marque. Cet export est utilisé pour décharger l’exécution de code OpenMP.

    Autres langages

    GCJ, le compilateur Java, n’était plus vraiment maintenu depuis des années, il est maintenant supprimé. Le compilateur Go est mis à jour pour la version 1.8 du langage.

    Sources : GCC 7 Release Series, C++ Standards Support in GCC, libstdc++ Implementation Status.

  2. #2
    Chroniqueur Actualités
    Avatar de Michael Guilloux
    Homme Profil pro
    Data Consultant
    Inscrit en
    Juillet 2013
    Messages
    2 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Data Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2 939
    Points : 88 211
    Points
    88 211
    Billets dans le blog
    2
    Par défaut GCC : la version 7.3 du compilateur libre est disponible
    GCC : la version 7.3 du compilateur libre est disponible
    avec des correctifs pour la vulnérabilité Spectre pour les dispositifs x86 et powerpc

    GCC est une collection de compilateurs créés par le projet GNU. Il s’agit plus exactement d’un logiciel libre capable de compiler divers langages de programmation, dont C, C++, Objective-C, Java, Ada et Fortran. Il faut également noter qu’il est utilisé pour le développement de la plupart des logiciels libres.

    La dernière version majeure du compilateur, GCC 7.1, est sortie en mai dernier avec le support complet des fonctionnalités C++17, et bien d'autres nouveautés. La branche GCC 7 a ensuite bénéficié d'une mise à jour (GCC 7.2) au mois d'août qui est venue corriger des problèmes de régressions et de sérieux bogues dans GCC 6.1.

    Comme GCC 7.2, la version 7.3 de la collection de compilateurs libres est essentiellement une mise à jour de correction de bogues. Elle contient des correctifs importants pour les régressions et les bogues sérieux dans GCC 7.2 avec plus de 99 bogues corrigés depuis la version précédente. GCC 7.3 inclut également des options de génération de code pour atténuer la variante 2 de la vulnérabilité Spectre (CVE 2017-5715) pour les cibles x86 et powerpc. La nouvelle version du compilateur libre vient en effet avec le support de Retpoline, une technique développée par les ingénieurs de Google pour atténuer la vulnérabilité Spectre. Elle a notamment l'avantage de ne pas affecter les performances des processeurs, contrairement à la mise à jour du microcode du processeur proposée par Intel ; laquelle a été pointée du doigt par les constructeurs et les chercheurs comme ayant un impact significatif sur les performances du processeur.


    Par ailleurs, rappelons que depuis le 20 novembre, le développement de GCC 8 a franchi une nouvelle étape : les fonctionnalités ont été gelées et seules les corrections de bogues et mises à jour de la documentation seront acceptées. La première version stable de GCC 8, numérotée 8.1, sera quant à elle disponible au début de cette année.

    Pour les changements et nouveautés dans GCC 8, la documentation officielle du projet n'en donne pas encore une liste complète, mais on peut déjà noter parmi les plus importants :

    • une amélioration du support de znver1 d'AMD ;
    • le support de Cannonlake, le processeur Intel de nouvelle génération succédant à Coffee Lake / Kaby Lake Refresh ;
    • un support initial pour Intel Icelake, la génération de processeurs qui va succéder à Cannonlake ;
    • le support d'Intel CET (Control-flow Enforcement Technology) pour une meilleure sécurité ;
    • le support du CPU Qualcomm Saphira, le successeur de Falkor, une microarchitecture ARM conçue par Qualcomm pour le marché des serveurs ;
    • le support du langage C17, à ne pas confondre avec C++ 17 ;
    • la préparation pour C++ 20 / C++2A ;
    • le support ARMv8-R ;
    • une amélioration supplémentaire du support ARM pour les nouveaux processeurs Cortex ;
    • une amélioration du support de la spécification OpenACC 2.5 ;
    • une mise à jour du front-end du langage Go ;
    • la poursuite des améliorations pour le support AMD HSA IL / BRIG ;
    • Cilk Plus est en cours de suppression ;
    • des améliorations significatives du back-end du compilateur Nios II ;
    • etc.

    Vous trouverez ici plus d'informations sur ces changements et nouveautés. En ce qui concerne la version 7.3 de GCC, elle est disponible sur les serveurs FTP répertoriés sur : http://www.gnu.org/order/ftp.html.

    Sources : LWN.net, Liste de diffusion GNU

    Et vous ?

    Qu’en pensez-vous ?

Discussions similaires

  1. Sortie de gcc 4.7
    Par gbdivers dans le forum GCC
    Réponses: 5
    Dernier message: 24/03/2012, 23h23
  2. Réponses: 5
    Dernier message: 25/05/2011, 09h28
  3. [GCC] Redirection de sortie
    Par Marco85 dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 03/07/2008, 11h24
  4. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  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