4.14. Compilateurs et outils de développement
RHEL 9 prend en charge les processeurs IBM POWER10
Du noyau Linux à la chaîne d'outils système (GCC, binutils, glibc), Red Hat Enterprise Linux 9 a été mis à jour pour inclure la prise en charge du dernier processeur POWER d'IBM, le POWER10. RHEL 9 est prêt pour la production de charges de travail sur POWER10, avec des améliorations à venir dans les prochaines versions.
(BZ#2027596)
GCC 11.2.1 est disponible
RHEL 9 est distribué avec la version 11.2.1 de GCC. Les corrections de bogues et améliorations notables incluent :
General improvements
- GCC utilise désormais par défaut le format de débogage DWARF Version 5.
- Les numéros de colonne indiqués dans les diagnostics représentent par défaut des numéros de colonne réels et respectent les caractères multicolonnes.
- Le vecteur de code linéaire prend en compte l'ensemble de la fonction lors de la vectorisation.
- Une série d'expressions conditionnelles qui comparent la même variable peut être transformée en une instruction de commutation si chacune d'entre elles contient une expression de comparaison.
Amélioration de l'optimisation interprocédurale :
-
Une nouvelle passe IPA-modref, contrôlée par l'option
-fipa-modref
, permet de suivre les effets secondaires des appels de fonction et d'améliorer la précision de l'analyse points-to. -
La passe de pliage du code identique, contrôlée par l'option
-fipa-icf
, a été considérablement améliorée pour augmenter le nombre de fonctions unifiées et réduire l'utilisation de la mémoire au moment de la compilation.
-
Une nouvelle passe IPA-modref, contrôlée par l'option
Amélioration de l'optimisation du temps de liaison :
- L'optimisation au moment de la liaison (LTO) permet au compilateur d'effectuer diverses optimisations sur toutes les unités de traduction de votre programme en utilisant sa représentation intermédiaire au moment de la liaison. Pour plus d'informations, voir Optimisation au moment de la liaison.
- L'allocation de la mémoire lors de l'établissement des liens a été améliorée afin de réduire l'utilisation de la mémoire en période de pointe.
-
En utilisant une nouvelle variable d'environnement
GCC_EXTRA_DIAGNOSTIC_OUTPUT
dans les IDE, vous pouvez demander des "conseils de réparation" lisibles par la machine sans avoir à ajuster les drapeaux de construction. -
L'analyseur statique, exécuté par l'option
-fanalyzer
, a été amélioré de manière significative avec de nombreuses corrections de bogues et améliorations.
Language-specific improvements
C family
- Les compilateurs C et C prennent en charge les imbrications de boucles non rectangulaires dans les constructions OpenMP et les routines d'allocation de la spécification OpenMP 5.0.
Attributs :
-
Le nouvel attribut
no_stack_protector
marque les fonctions qui ne doivent pas être instrumentées avec une protection de la pile (-fstack-protector
). -
L'attribut
malloc
amélioré peut être utilisé pour identifier les paires d'API d'allocation et de désallocation.
-
Le nouvel attribut
Nouveaux avertissements :
-
-Wsizeof-array-div
, activée par l'option-Wall
, signale les divisions de deux opérateurssizeof
lorsque le premier est appliqué à un tableau et que le diviseur n'est pas égal à la taille de l'élément du tableau. -
-Wstringop-overread
, activée par défaut, signale les appels à des fonctions de chaîne de caractères qui tentent de lire au-delà de la fin des tableaux qui leur sont transmis en tant qu'arguments.
-
Avertissements renforcés :
-
-Wfree-nonheap-object
détecte plus de cas d'appels à des fonctions de désallocation avec des pointeurs non renvoyés par une fonction d'allocation de mémoire dynamique. -
-Wmaybe-uninitialized
diagnostique le passage de pointeurs et de références à des mémoires non initialisées dans des fonctions qui prennent des arguments qualifiésconst
. -
-Wuninitialized
détecte les lectures à partir d'une mémoire allouée dynamiquement et non initialisée.
-
C
Plusieurs nouvelles caractéristiques de la prochaine révision C2X de la norme ISO C sont prises en charge par les options
-std=c2x
et-std=gnu2x
. Par exemple :-
L'attribut
est pris en charge.
-
L'opérateur de préprocesseur
__has_c_attribute
est pris en charge. - Les étiquettes peuvent apparaître avant les déclarations et à la fin d'une déclaration composée.
-
L'attribut
C
-
Le mode par défaut devient
-std=gnu 17
. -
La bibliothèque C
libstdc
supporte désormais mieux le C 17. Plusieurs nouvelles fonctionnalités du C 20 sont mises en œuvre. Notez que la prise en charge du C 20 est expérimentale.
Pour plus d'informations sur les fonctionnalités, voir C 20 Language Features.
- L'interface C prend en charge, à titre expérimental, certaines des futures fonctionnalités de la version préliminaire de C 23.
Nouveaux avertissements :
-
-Wctad-maybe-unsupported
, désactivée par défaut, avertit de l'exécution d'une déduction d'argument de modèle de classe sur un type n'ayant pas de guides de déduction. -
-Wrange-loop-construct
, activée par-Wall
, signale qu'une boucle for basée sur un intervalle crée des copies inutiles et inefficaces en termes de ressources. -
-Wmismatched-new-delete
, activée par-Wall
, signale les appels à l'opérateur delete avec des pointeurs renvoyés par des formes non concordantes de l'opérateur new ou par d'autres fonctions d'allocation non concordantes. -
-Wvexing-parse
, activée par défaut, signale la règle d'analyse la plus gênante : les cas où une déclaration ressemble à une définition de variable, mais où le langage C exige qu'elle soit interprétée comme une déclaration de fonction.
-
Architecture-specific improvements
The 64-bit ARM architecture
-
L'architecture Armv8-R est prise en charge par l'option
-march=armv8-r
. - GCC peut autovectoriser les opérations d'addition, de soustraction et de multiplication, ainsi que les variantes d'accumulation et de soustraction sur les nombres complexes.
AMD and Intel 64-bit architectures
-
Un nouveau support d'extension ISA pour Intel AVX-VNNI est ajouté. Le commutateur du compilateur
-mavxvnni
contrôle les éléments intrinsèques AVX-VNNI. -
Les processeurs AMD basés sur le noyau znver3 sont pris en charge par la nouvelle option
-march=znver3
. -
Trois niveaux de microarchitecture définis dans le supplément psABI x86-64 sont pris en charge par les nouvelles options
-march=x86-64-v2
,-march=x86-64-v3
, et-march=x86-64-v4
.
IBM Z architectures
- GCC 11.2.1 utilise par défaut le processeur IBM z14.
IBM Power Systems
- GCC 11.2.1 utilise par défaut le processeur IBM POWER9.
-
Le compilateur GCC prend désormais en charge les instructions POWER10 grâce à la nouvelle option de ligne de commande
-mcpu=power10
(BZ#1986836, BZ#1870016, BZ#1870025, BZ#1870028, BZ#2019811, BZ#2047296)
Nouvelle commande pour capturer les données d'optimisation de glibc
La nouvelle commande ld.so --list-diagnostics
capture les données qui influencent les décisions d'optimisation glibc
, telles que la sélection IFUNC et la configuration glibc-hwcaps
, dans un seul fichier lisible par une machine.
Changements notables binutils
RHEL 9 apporte les modifications suivantes à binutils
:
-
binutils
prend désormais en charge le jeu d'instructions AMX/TMUL d'Intel, ce qui se traduit par une amélioration des performances des applications qui peuvent utiliser cette nouvelle fonctionnalité. - L'assembleur, l'éditeur de liens et d'autres utilitaires binaires prennent désormais en charge les instructions POWER10.
(BZ#2030554, BZ#1870021)
sched_getcpu
peut désormais, en option, utiliser rseq
(séquences redémarrables) pour améliorer les performances sur les architectures ARM 64 bits et d'autres architectures
La précédente implémentation de sched_getcpu
sur les architectures ARM 64 bits utilise l'appel système getcpu
, qui est trop lent pour une utilisation efficace dans la plupart des algorithmes parallèles. D'autres architectures utilisent l'accélération vDSO (virtual dynamic shared object) pour contourner ce problème. L'implémentation de sched_getcpu
à l'aide de rseq
améliore considérablement les performances sur les architectures ARM 64 bits. Les autres architectures n'enregistrent qu'une légère amélioration.
Pour configurer sched_getcpu
afin qu'il utilise rseq
, définissez la variable d'environnement GLIBC_TUNABLES=glibc.pthread.rseq=1
:
# GLIBC_TUNABLES=glibc.pthread.rseq=1 # export GLIBC_TUNABLES
Mise à jour des outils de performance et des débogueurs
Les outils de performance et les débogueurs suivants sont disponibles avec RHEL 9.0 :
- GDB 10.2
- Valgrind 3.18.1
- SystemTap 4.6
- Dyninst 11.0.0
- elfutils 0.186
(BZ#2019806)
Amélioration de la fonctionnalité DAWR dans GDB sur IBM POWER10
RHEL 9 est distribué avec GDB 10.2 qui fournit une fonctionnalité DAWR améliorée. De nouvelles capacités de surveillance matérielle sont activées pour GDB sur les processeurs IBM POWER10. Par exemple, un nouvel ensemble de registres DAWR/DAWRX a été ajouté.
(BZ#1870029)
GDB supporte les nouvelles instructions préfixées sur IBM POWER10
GDB 10.2 prend entièrement en charge les instructions préfixées Power ISA 3.1 sur POWER10, qui comprennent des instructions préfixées de huit octets. Dans RHEL 8.4, GDB ne prenait en charge que les instructions de quatre octets.
(BZ#1870031)
RHEL 9 fournit boost
1.75.0
RHEL 9 est distribué avec le paquet boost
version 1.75.0. Les corrections de bogues et améliorations notables par rapport à la version 1.67.0 sont les suivantes :
-
La bibliothèque
Boost.Signals
a été supprimée et remplacée par le composantBoost.Signals2
qui ne contient que des en-têtes. -
L'outil
bjam
du paquetboost-jam
a été remplacé parb2
dans le paquetboost-b2
. Nouvelles bibliothèques :
-
Boost.Contracts
-
Boost.HOF
-
Boost.YAP
-
Boost.Safe Numerics
-
Boost.Outcome
-
Boost.Histogram
-
Boost.Variant2
-
Boost.Nowide
-
Boost.StaticString
-
Boost.STL_Interfaces
-
Boost.JSON
-
Boost.LEAF
-
Boost.PFR
-
(BZ#1957950)
RHEL 9 fournit le jeu d'outils LLVM 13.0.1
RHEL 9 est distribué avec la version 13.0.1 du jeu d'outils LLVM. Les corrections de bogues et améliorations notables par rapport à la version 12.0.1 sont les suivantes :
-
Clang supporte maintenant les appels de queue garantis avec les attributs de déclaration
[[clang::musttail]]
en C et__attribute__((musttail))
en C. -
Clang supporte maintenant l'avertissement
-Wreserved-identifier
, qui prévient les développeurs lorsqu'ils utilisent des identifiants réservés dans leur code. -
Le drapeau
-Wshadow
de Clang vérifie maintenant aussi les liens structurés ombragés. -
Le
-Wextra
de Clang implique désormais également le-Wnull-pointer-subtraction
. -
Clang supporte maintenant les appels de queue garantis avec les attributs de déclaration
[[clang::musttail]]
en C et__attribute__((musttail))
en C.
Dans RHEL 9, vous pouvez facilement installer llvm-toolset
en tant que paquetage RPM.
(BZ#2001107)
Changements notables dans CMake 3.20.2
RHEL 9 est distribué avec CMake 3.20.2. Pour utiliser CMake sur un projet qui nécessite la version 3.20.2 ou moins, utilisez la commande cmake_minimum_required
(version 3.20.2).
Les changements les plus notables sont les suivants :
-
Les modes du compilateur C 23 peuvent désormais être spécifiés en utilisant les propriétés de la cible
CXX_STANDARD
,CUDA_STANDARD
,OBJCXX_STANDARD
, ou en utilisant la méta-caractéristiquecxx_std_23
de la fonction compile features. - La prise en charge du langage CUDA permet désormais au compilateur NVIDIA CUDA d'être un lien symbolique.
-
Les compilateurs Intel oneAPI NextGen LLVM sont maintenant supportés avec l'ID de compilateur
IntelLLVM
. - CMake facilite désormais la compilation croisée pour Android en fusionnant avec le fichier de la chaîne d'outils du NDK Android.
-
Lors de l'exécution de
cmake(1)
pour générer un système de construction de projet, les arguments de ligne de commande inconnus commençant par un trait d'union sont désormais rejetés.
Pour plus d'informations sur les nouvelles fonctionnalités et les fonctionnalités obsolètes, voir les notes de mise à jour de CMake.
(BZ#1957948)
RHEL 9 fournit Go 1.17.7
RHEL 9 est distribué avec la version 1.17.7 de Go Toolset. Les corrections de bogues et améliorations notables par rapport à la version 1.16.7 sont les suivantes :
- Ajout d'une option pour convertir les tranches en pointeurs de tableau.
- Ajout de la prise en charge des lignes //go:build.
- Amélioration des performances des appels de fonction sur amd64.
- Les arguments des fonctions sont formatés plus clairement dans les traces de pile.
- Les fonctions contenant des fermetures peuvent être mises en ligne.
- Réduction de la consommation de ressources dans l'analyse des certificats x509.
Dans RHEL 9, vous pouvez facilement installer go-toolset
en tant que paquetage RPM.
(BZ#2014087)
Le mode Go FIPS est pris en charge par OpenSSL 3
Vous pouvez désormais utiliser la bibliothèque OpenSSL 3 en mode Go FIPS.
RHEL 9 fournit Rust Toolset 1.58.1
RHEL 9 est distribué avec la version 1.58.1 de Rust Toolset. Les corrections de bogues et améliorations notables par rapport à la version 1.54.0 sont les suivantes :
-
Le compilateur Rust prend désormais en charge l'édition 2021 du langage, avec la capture disjointe dans les fermetures,
IntoIterator
pour les tableaux, un nouveau résolveur de fonctionnalités Cargo, et bien plus encore. - Ajout du support Cargo pour les nouveaux profils personnalisés.
- Cargo dédouble les erreurs de compilation.
- Ajout de nouveaux modèles de champs de tir ouverts.
- Ajout d'identifiants capturés dans les chaînes de format.
Pour plus d'informations, voir Rust 1.55Rust1.56Rust1.57Rust 1.58
Dans RHEL 9, vous pouvez facilement installer rust-toolset
en tant que paquetage RPM.
(BZ#2002885)
RHEL 9 fournit le paquet pcp
version 5.3.5
RHEL 9 est distribué avec le paquet Performance Co-Pilot (pcp
) version 5.3.5. Depuis la version 5.3.1, un nouveau sous-paquet pcp-pmda-bpf
a été ajouté. Il fournit des données sur les performances des programmes eBPF
utilisant BPF CO-RE (libbpf
et BTF
).
Authentification Active Directory pour l'accès aux métriques du serveur SQL dans PCP
Grâce à cette mise à jour, un administrateur système peut configurer pmdamssql(1)
pour qu'il se connecte en toute sécurité aux métriques du serveur SQL à l'aide de l'authentification Active Directory (AD).
Le nouvel utilitaire pcp-ss
PCP est maintenant disponible
L'utilitaire pcp-ss
PCP fournit des statistiques sur les sockets collectées par pmdasockets(1)
PMDA. La commande est compatible avec la plupart des options de ligne de commande et des formats de rapport de ss
. Il offre également les avantages d'une surveillance locale ou à distance en mode direct et d'une relecture historique à partir d'une archive PCP précédemment enregistrée.
RHEL 9 fournit grafana
7.5.11
RHEL 9 est distribué avec le paquet grafana
version 7.5.11. Les changements notables par rapport à la version 7.5.9 sont les suivants :
-
Ajout d'une nouvelle transformation
prepare time series
pour la rétrocompatibilité des panneaux qui ne supportent pas le nouveau format de cadre de données. - Mise à jour de la fonctionnalité de récupération de mot de passe afin d'utiliser HMAC-SHA-256 au lieu de SHA-1 pour générer des jetons de réinitialisation de mot de passe.
RHEL 9 fournit grafana-pcp
3.2.0
RHEL 9 est distribué avec la version 3.2.0 du paquet grafana-pcp
. Les corrections de bogues et améliorations notables par rapport à la version 3.1.0 sont les suivantes :
- Ajout d'un nouveau tableau de bord MS SQL Server pour PCP Redis.
- Ajout de la visibilité des histogrammes vides dans le tableau de bord PCP Vector eBPF/BCC Overview.
-
Correction d'un bug où la fonction
metric()
de PCP Redis ne retournait pas tous les noms de métriques.
L'accès aux hôtes distants par l'intermédiaire d'un site central pmproxy
pour la source de données Vector dans grafana-pcp
Dans certains environnements, la politique de réseau n'autorise pas les connexions du navigateur de l'observateur du tableau de bord aux hôtes surveillés directement. Cette mise à jour permet de personnaliser le site hostspec
afin de se connecter à un site central pmproxy
, qui transmet les demandes aux différents hôtes.
Un nouveau paquet : ansible-pcp
Le package ansible-pcp
contient des rôles pour Performance Co-Pilot (PCP) et des logiciels connexes, tels que Redis et Grafana, utilisés pour mettre en œuvre le rôle de système RHEL metrics
.
(BZ#1957566)
RHEL 9 fournit python-jsonpointer
2.0
RHEL 9 est distribué avec le paquet python-jsonpointer
version 2.0.
Les changements notables par rapport à la version 1.9 sont les suivants :
- Les versions 2.6 et 3.3 de Python sont obsolètes.
-
Le module
python-jsonpointer
vérifie désormais automatiquement que les pointeurs ne contiennent pas de séquences d'échappement invalides. - Vous pouvez désormais écrire des pointeurs en tant qu'arguments dans la ligne de commande.
- Les pointeurs ne peuvent plus être soumis dans un format codé en URL.
.NET 6.0 est disponible
RHEL 9 est distribué avec .NET version 6.0. Les améliorations notables sont les suivantes :
- Prise en charge de Arm 64 bits (aarch64)
- Support pour IBM Z et LinuxONE (s390x)
Pour plus d'informations, voir les notes de mise à jour pour les paquets RPM .NET 6.0 et les notes de mise à jour pour les conteneurs .NET 6.0.
.NET 6.0 est la version initiale de ce flux d'applications, que vous pouvez installer facilement en tant que paquetage RPM. .NET 6.0 a un cycle de vie plus court que RHEL 9. Pour plus de détails, consultez le document Red Hat Enterprise Linux Application Streams Life Cycle (cycle de vie des flux d'applications Red Hat Enterprise Linux).
(BZ#1986211)
Implémentations Java dans RHEL 9
Le référentiel RHEL 9 AppStream comprend :
-
Les paquets
java-17-openjdk
, qui fournissent l'environnement d'exécution Java OpenJDK 17 et le kit de développement logiciel Java OpenJDK 17. -
Les paquets
java-11-openjdk
, qui fournissent l'environnement d'exécution Java OpenJDK 11 et le kit de développement logiciel Java OpenJDK 11. -
Les paquets
java-1.8.0-openjdk
, qui fournissent l'environnement d'exécution Java OpenJDK 8 et le kit de développement logiciel Java OpenJDK 8.
Pour plus d'informations, voir la documentation OpenJDK.
(BZ#2021262)
Outils Java dans RHEL 9
Le référentiel RHEL 9 AppStream comprend les outils Java suivants :
-
Maven 3.6.3
un outil de gestion et de compréhension des projets de logiciels. -
Ant 1.10.9
le logiciel de gestion des applications Java est une bibliothèque Java et un outil de ligne de commande permettant de compiler, d'assembler, de tester et d'exécuter des applications Java.
Maven 3.6
et Ant 1.10
sont les versions initiales de ces flux d'applications, que vous pouvez installer facilement sous forme de paquets RPM non modulaires.
(BZ#1951482)
SWIG 4.0
disponible dans le répertoire du CRB
La version 4.0 du SWIG (Simplified Wrapper and Interface Generator) est disponible dans le dépôt CodeReady Linux Builder (CRB). Cette version ajoute la prise en charge de PHP 8
.
Dans RHEL 9, vous pouvez facilement installer SWIG
en tant que paquetage RPM.
Notez que les paquets inclus dans le référentiel CodeReady Linux Builder ne sont pas pris en charge.
(BZ#1943580)