Après une année de développement intense, la sortie de la nouvelle version de « GCC 15.1 » a été annoncée, qui se positionne comme la première version stable au sein de la nouvelle branche 15.x de cette suite de compilateurs open source populaire.
Cette version lance non seulement officiellement la nouvelle série GCC 15, mais marque également le début des préparatifs pour le développement de GCC 16, car la branche 16.0 a été bifurquée en parallèle et jettera les bases de la prochaine version majeure, GCC 16.1.
Nouvelles fonctionnalités principales de GCC 15.1
L'un des changements les plus notables de cette nouvelle version est que GCC 15.1 adopte la norme C23 par défaut pour la compilation du code C, en utilisant l'option -std=gnu23. Cette mise à jour remplace la norme précédente utilisée par défaut, C17 (-std=gnu17), et introduit un certain nombre de nouvelles fonctionnalités de la nouvelle norme. Parmi eux se trouve le constante nullptr, le type _BitInt(n) et les mots-clés bool, true et false, ce qui pourrait entraîner des conflits avec les identifiants existants dans le code hérité.
Une autre nouvelle fonctionnalité intégrée à GCC 15.1 est la Directive #embed pour intégrer des données binaires, et des attributs tels que non séquencé et reproductible, qui offrent un meilleur contrôle sur l'ordre d'exécution et la détermination de résultats cohérents. De plus, des éléments de la future norme C2Y ont été implémentés, tels que des variables déclarées dans des conditions if, des plages de valeurs dans des instructions case, des suffixes imaginaires i et j, et la prise en charge des opérateurs ++ et — appliqués aux nombres complexes.
Améliorations du C++ et du futur C++26
Dans le cas du langage C++, la nouvelle version de GCC 15.1 implémente des fonctionnalités qui sont en cours de discussion pour la norme C++26, à mesure que de nouvelles fonctionnalités sont introduites, telles que l'opérateur « ami », l'utilisation de constexpr avec des variantes du nouvel opérateur et des améliorations dans la syntaxe des liens structurés et des attributs tels que musttail pour une récursivité de queue garantie.
La prise en charge de C++23 est également étendue avec de nouvelles règles d'utilisation de l'exportation, des améliorations dans la gestion des objets temporaires et une implémentation expérimentale des modules std et std.compat dans libstdc++. De plus, la sécurité est renforcée pour l'initialisation de l'union et la compilation du code est améliorée grâce à un système de hachage de modèles plus efficace.
Nouveaux avertissements et améliorations dans l'analyse statique
Le système L'analyse statique a reçu une refonte visuelle qui met en évidence les problèmes à travers des symboles, Conseils pour la migration vers C23 et une nouvelle bibliothèque libgdiagnostics ce qui permet la réutilisation de la logique de diagnostic dans d'autres projets. La prise en charge de la génération de rapports au format SARIF est également introduite, facilitant l'intégration avec les outils d'analyse de code modernes.
À Les avertissements existants sont ajoutés aux nouveaux, comme -Wanalyzer-comportement-indéfini-ptrdiff pour détecter les soustractions entre des pointeurs non liés, –Espace de fin et espace de début pour indiquer les espaces inutiles, et –Garde-tête pour détecter les erreurs dans les protections d'inclusion d'en-tête.
Optimisations et support
Parmi les optimisations notables, Un mode de compilation incrémentielle pour LTO est inclus (Link-Time Optimization), conçu pour accélérer les recompilations lorsque les modifications sont minimes. Aussi la vectorisation des boucles est améliorée, même dans les cas où la taille des tableaux n'est pas connue au moment de la compilation, et augmente la vitesse de compilation de fichiers très volumineux.
Côté support, des extensions ARMv64 ont été ajoutées à AArch8, prise en charge des nouveaux processeurs comme Apple M3, Cortex-X925 et NVIDIA Grace, et étend la plate-forme MinGW. La génération de code pour les GPU AMD Radeon est renforcée avec Prise en charge expérimentale des nouvelles séries GFX9, GFX10.3 et GFX11. Pour l'architecture x86, la prise en charge d'AVX10.2 et des nouvelles instructions AMX est activée, et la prise en charge de Xeon Phi Knights est interrompue.
En outre, GCC 15.1 introduit un compilateur pour COBOL (gcobol), avec prise en charge des architectures x86-64 et AArch64, et une implémentation mise à jour du langage D (version 2.111.0). La prise en charge des entiers non signés dans Fortran a été ajoutée et l'adoption d'OpenMP 5.0 à 6.0 a été avancée, y compris les améliorations d'interopérabilité et l'utilisation unifiée de la mémoire sur les GPU.