Sortie de la suite de compilateurs GCC 13

Après un an de développement, la version gratuite de la suite de compilateurs GCC 13.1 est sortie, la première version significative de la nouvelle branche GCC 13.x. Dans le cadre du nouveau schéma de numérotation des versions, la version 13.0 a été utilisée pendant le développement, et peu de temps avant la sortie de GCC 13.1, la branche GCC 14.0 était déjà forkée, à partir de laquelle la prochaine version importante de GCC 14.1 sera formée.

Les principaux changements:

  • Le GCC a adopté une interface pour créer des programmes dans le langage de programmation Modula-2. Il prend en charge le code du bâtiment conforme aux dialectes PIM2, PIM3 et PIM4, ainsi qu'à la norme ISO acceptée pour cette langue.
  • Une interface avec l'implémentation du compilateur du langage Rust préparé par le projet gccrs (GCC Rust) a été ajoutée à l'arborescence des sources de GCC. Dans la vue actuelle, le frontal est marqué comme expérimental et désactivé par défaut. Une fois le frontend prêt (attendu dans la prochaine version), la boîte à outils standard GCC peut être utilisée pour compiler des programmes Rust sans avoir besoin d'installer le compilateur rustc construit à l'aide des développements LLVM.
  • Link-in-Step Optimization (LTO) ajoute la prise en charge d'un serveur de tâches (jobserver) maintenu par le projet GNU make pour optimiser l'exécution de builds parallèles sur plusieurs threads. Dans GCC, le jobserver est utilisé pour paralléliser le travail lors de l'optimisation LTO dans le contexte de l'ensemble du programme (WPA, Whole-program Analysis). Les canaux nommés (--jobserver-style=fifo) sont utilisés par défaut pour interagir avec le jobserver.
  • L'analyseur statique (-fanalyzer) propose 20 nouveaux contrôles de diagnostic, dont "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite -récursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • La possibilité de générer des diagnostics au format SARIF basé sur JSON a été implémentée. Le nouveau format peut être utilisé pour obtenir des résultats d'analyse statique (GCC -fanalyzer), ainsi que pour obtenir des informations sur les avertissements et les erreurs. L'activation se fait avec l'option "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", où les options avec "json" entraînent une sortie dans une variante spécifique à GCC du format JSON. .
  • Implémentation de certaines fonctionnalités définies dans le standard C23 C, comme la constante nullptr pour définir des pointeurs nuls, facilitant l'utilisation de listes avec un nombre variable d'arguments (variadique), étendant les capacités des énumérations, l'attribut noreturn, permettant l'utilisation de constexpr et auto lors de la définition des objets, le typeof et typeof_unqual, les nouveaux mots-clés alignas, alignof, bool, false, static_assert, thread_local et true, autorisent les parenthèses vides à l'initialisation.
  • Implémentation de certaines fonctionnalités définies dans le standard C++23, comme la possibilité de placer des marques à la fin des expressions composées, la compatibilité avec le type char8_t, la directive du préprocesseur #warning, délimitée par (\u{}, \o{} , \x{}), et les séquences d'échappement nommées ('\N{LETTRE MAJUSCULE LATINE A}'), opérateur statique(), opérateur statique[], opérateur d'égalité dans les expressions, exception à certaines restrictions sur l'utilisation de constexpr, prise en charge pour UTF-8 dans les textes sources.
  • libstdc++ a amélioré la prise en charge expérimentale des normes C++20 et C++23, comme l'ajout de la prise en charge des fichiers d'en-tête et std::format, capacités étendues du fichier d'en-tête , types à virgule flottante supplémentaires ajoutés, fichiers d'en-tête implémentés Et .
  • Ajout de nouveaux attributs de fonction pour documenter qu'un descripteur de fichier est transmis dans une variable entière : "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", et "__attribute__((fd_arg_write(N) )) ". Les attributs spécifiés peuvent être utilisés dans un analyseur statique (-fanalyzer) pour détecter un travail incorrect avec les descripteurs de fichiers.
  • Un nouvel attribut "__attribute__((assume(EXPR)))" a été ajouté, avec lequel vous pouvez indiquer au compilateur que l'expression est vraie et le compilateur peut utiliser ce fait sans évaluer l'expression.
  • Ajout de l'indicateur "-fstrict-flex-arrays=[level]" pour sélectionner le comportement lors du traitement d'un élément de tableau flexible dans les structures (Flexible Array Members, un tableau de taille indéfinie à la fin de la structure, par exemple, "int b[] ").
  • Ajout de l'indicateur "-Wenum-int-mismatch" pour émettre des avertissements en cas de non-concordance entre un type énuméré et un type entier.
  • Le frontal Fortran prend entièrement en charge la finalisation.
  • La prise en charge des fonctions et types génériques (génériques) a été ajoutée au frontend du langage Go, et la compatibilité avec les packages pour le langage Go 1.18 a été assurée.
  • Le backend AArch64 prend en charge le processeur Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) et Arm Neoverse V2 (neovere -v2) . La prise en charge des arguments "armv9.1-a", "armv9.2-a" et "armv9.3-a" a été ajoutée à l'option "-march=". Ajout de la prise en charge des extensions de processeur FEAT_LRCPC, FEAT_CSSC et FEAT_LSE2.
  • La prise en charge des processeurs STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) et Arm Cortex-M85 (cortex-m85) a été ajoutée au backend de l'architecture ARM.
  • La prise en charge des processeurs Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids et AMD Zen 86 (znver4) a été ajoutée au backend x4. Les extensions d'architecture de jeu d'instructions AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT et AMX-COMPLEX proposées dans les processeurs Intel ont été implémentées. Pour C et C++ sur les systèmes avec SSE2, le type __bf16 est fourni.
  • Le backend de génération de code pour les GPU AMD Radeon (GCN) implémente la possibilité d'utiliser les accélérateurs AMD Instinct MI200 pour améliorer les performances OpenMP/OpenACC. Vectorisation améliorée à l’aide des instructions SIMD.
  • Capacités backend considérablement étendues pour la plate-forme LoongArch.
  • Ajout de la prise en charge du XuanTie C906 (thead-c906) du CPU T-Head dans le backend RISC-V. Prise en charge implémentée des gestionnaires de vecteurs définis dans la spécification RISC-V Vector Extension Intrinsic 0.11. Ajout de la prise en charge de 30 extensions de spécifications RISC-V.
  • Lors de la génération d'objets partagés avec l'option "-shared", le code de démarrage n'est plus ajouté après l'ajout d'un environnement à virgule flottante si les optimisations "-Ofast", "-ffast-math" ou "-funsafe-math-optimizations" sont activées. .
  • La prise en charge du format de débogage DWARF est implémentée dans presque toutes les configurations.
  • Ajout de l'option "-gz=zstd" pour compresser les informations de débogage à l'aide de l'algorithme Zstandard. Suppression de la prise en charge du mode de compression des informations de débogage obsolète "-gz=zlib-gnu".
  • Le support initial d'OpenMP 5.2 (Open Multi-Processing) a été ajouté et la mise en œuvre des standards OpenMP 5.0 et 5.1 s'est poursuivie, définissant des API et des méthodes pour appliquer des méthodes de programmation parallèle sur des systèmes multicœurs et hybrides (CPU + GPU / DSP) avec unités de mémoire partagée et de vectorisation (SIMD).
  • La prise en charge de l'ancien format de stockage des informations de débogage « STABS » (activé par les options -gstabs et -gxcoff), créé dans les années 1980 et utilisé dans le débogueur dbx, a été interrompue.
  • Prise en charge obsolète de Solaris 11.3 (le code permettant de prendre en charge cette plate-forme sera supprimé dans une version ultérieure).

Source: opennet.ru

Ajouter un commentaire