Les compilateurs de la série GCC 10 arrivent dans une mise à jour majeure

GCC (GNU Compiler Collection) 10.1, une version majeure de la plate-forme, a été publiée le 7 mai 2020, avec des faits saillants, notamment les capacités C ++ 20 et la prise en charge du langage C2X. C2X est la prochaine révision majeure du langage C, prévue pour 2022. 

Les notes de publication pour GCC 10 montrent qu'une multitude de fonctionnalités C ++ 20 ont été implémentées, notamment l'autorisation d'assemblage en ligne dans les fonctions constexpr et l'extension des liaisons structurées. Aussi pour C ++ 20, GCC 10 autorise les conversions en tableaux de bornes inconnues, permet une initialisation par défaut triviale dans des contextes constexpr, ajoute le constinitmot - clé et désapprouve le volatile mot -  clé.

Pour C2X, la prochaine révision de la norme ISO C, plusieurs fonctionnalités sont prises en charge avec la syntaxe  -std=c2xet -std+gnu2x. Parmi ceux - ci sont le strftimeformat de vérification supportant les %OBet les %Obformats et les constantes de caractères UTF-8 en utilisant le U8' 'syntaxe.

GCC, qui existe depuis plus de 33 ans, comprend des frontaux et des bibliothèques pour C, C ++, Fortran, Ada, Go et D. Un bulletin a été publié sur le portage vers GCC 10. D'autres nouvelles fonctionnalités de GCC 10.1 incluent

  • Des fonctions intégrées ont été ajoutées, y compris un has_builtinopérateur de préprocesseur qui peut être utilisé pour interroger la prise en charge des fonctions intégrées fournies par GCC et d'autres compilateurs qui le prennent en charge. 
  • Des options de commande ont été ajoutées. Ceux - ci comprennent  -fallocation-dce, d'éliminer les paires inutiles de newet les deleteopérateurs, et -fanalyzer, afin de permettre une nouvelle passe d'analyse statique et avertissements associés. Cette dernière option doit être considérée comme étant en phase expérimentale.
  • Des améliorations d'optimisation interprocédurale ont été apportées. Il s'agit notamment de la ré-implémentation des remplacements scalaires inter-procéduraux des agrégats (IPA-SRA) qui ont été réimplémentés pour fonctionner au moment de la liaison. IPA-SRA peut désormais également supprimer le calcul et renvoyer les valeurs de retour inutilisées.
  • Les améliorations de l'optimisation du temps de liaison incluent un nouveau binaire ito-dump. Le programme peut vider diverses informations sur un bytefichier objet LTO .
  • Des améliorations d'optimisation basée sur les profils ont été apportées, notamment l'amélioration de la maintenance des profils pendant la compilation et le partitionnement chaud / froid.
  • Pour la famille C, la accessfonction et l' typeattribut ont été ajoutés pour décrire comment une fonction accède aux objets qui lui sont passés par un pointeur ou une référence, et pour associer ces arguments à des arguments entiers indiquant la taille de l'objet. L'attribut est utilisé pour activer la détection des accès invalides par des fonctions définies par l'utilisateur. Il existe également de nouveaux avertissements et des améliorations aux avertissements existants. Un avertissement -Wzero-length-bounds,, met en garde contre l'accès aux éléments de tableaux de longueur nulle qui pourraient chevaucher d'autres membres du même objet.
  • Une incompatibilité ABI entre C ++ 14 et C ++ 17 a été corrigée. Sur certaines cibles, une classe avec un sous-objet de taille zéro serait transmise de manière incorrecte lors de la compilation en C ++ 17 ou C ++ 20.