4.14. コンパイラーおよび開発ツール
RHEL 9 は、IBM POWER10 プロセッサーへの対応を提供します。
Linux カーネルからシステムツールチェーン (GCC、binutils、glibc) を介して、IBM の最新の POWER プロセッサーである POWER10 のサポートが含まれるように Red Hat Enterprise Linux 9 が更新されました。RHEL 9 は、POWER10 でワークロードに対応するため、今後のリリースで機能拡張が提供されています。
(BZ#2027596)
GCC 11.2.1 が利用できる。
RHEL 9 には、GCC バージョン 11.2.1 が同梱されています。主なバグ修正と機能拡張は、以下のとおりです。
一般的な改善
- GCC は、DWARF バージョン 5 のデバッグフォーマットをデフォルトで使用するようになりました。
- 診断で表示される列番号は、デフォルトでは実際の列番号を表し、複数列の文字を尊重します。
- 直線コードベクターライザは、機能全体を考慮してベクターリングを行います。
- 同じ変数を比較する一連の条件式は、それぞれに比較式が含まれていれば、switch ステートメントに変換することができます。
プロシージャー間の最適化の改善:
-
fipa-modref
オプションで制御される新しい IPA-modref パスは、関数呼び出しの副作用を追跡し、ポイントツー分析の精度を向上させます。 -
fipa-icf
オプションで制御される同一コードのフォールディングパスが大幅に改善され、統一された関数の数が増え、コンパイル時のメモリー使用量が削減されました。
-
リンクタイム最適化の改善:
- Link-time optimization (LTO) を使用すると、コンパイラーは、リンク時に中間表現を使用して、プログラムのすべての変換ユニットでさまざまな最適化を実行できます。詳しくは Link time optimization をご覧ください。
- リンク時のメモリー割り当てを改善し、ピークのメモリー使用量を削減しました。
-
IDE で新しい
GCC_EXTRA_DIAGNOSTIC_OUTPUT
環境変数を使用すると、ビルドフラグを調整することなく、機械的に読める修正のヒントを要求することができます。 -
-fanalyzer
オプションで実行されるスタティックアナライザーが大幅に改善され、多数のバグフィックスと機能強化が行われました。
言語固有の改善
C ファミリー
- C および C++ コンパイラーは、OpenMP 5.0 仕様の OpenMP コンストラクトおよびアロケータルーチンにおいて、非矩形のループネストをサポートしています。
属性:
-
新しい
no_stack_protector
属性は、スタック保護(-fstack-protector)
をかけてはいけない関数を示します。 -
改良された
malloc
属性は、アロケータとデアロケータの API ペアを識別するために使用することができます。
-
新しい
新しい警告:
-
-Wsizeof-array-div
(-Wall
オプションで有効) は、2 つのsizeof
演算子の除算について、最初の演算子が配列に適用され、除算値が配列要素のサイズと一致しない場合に警告を発します。 -
-Wstringop-overread
は、デフォルトで有効になっており、引数として渡された配列の最後を超えて読み取ろうとする文字列関数の呼び出しについて警告します。
-
警告の強化:
-
-Wfree-nonheap-object
は、動的メモリー割り当て関数から返されていないポインターを使用した割り当て解除関数の呼び出しのインスタンスをより多く検出します。 -
-Wmaybe-uninitialized
は、初期化されていないメモリーへのポインターや参照が、const
-qualified 引数を取る関数に渡すことを診断します。 -
-Wuninitialized
は、初期化されていない動的に割り当てられたメモリーからの読み取りを検出します。
-
C
-std=c2x
および-std=gnu2x
オプションにより、ISO C 規格の次期 C2X 改訂版の新機能がサポートされています。以下に例を示します。-
標準属性がサポートされています。
-
__has_c_attribute
プリプロセッサー演算子がサポートされています。 - ラベルは、宣言の前や複合ステートメントの最後に表示されることがあります。
-
C++
-
デフォルトのモードは
-std=gnu++17
に変更されます。 -
C++ライブラリーの
libstdc++
では、C++17 のサポートが改善されました。 C++20 の新機能がいくつか実装されています。なお、C++20 のサポートは実験的なものです。
各機能の詳細については、C++20 Language Features を参照してください。
- C++フロントエンドは、今後予定されている C++23 ドラフト機能の一部を実験的にサポートしています。
新しい警告:
-
-Wctad-maybe-unsupported
はデフォルトでは無効で、控除ガイドのない型でクラステンプレート引数の控除を行うことについて警告します。 -
-Wrange-loop-construct
は、-Wall
で有効になり、範囲ベースの for ループが不必要でリソース効率の悪いコピーを作成している場合に警告を発します。 -
-Wmismatched-new-delete
は-Wall
で有効になり、不一致な形式の new 演算子や他の不一致な割り当て関数から返されたポインターを持つ delete 演算子の呼び出しについて警告します。 -
-Wvexing-parse
はデフォルトで有効になっており、最も厄介な構文解析ルールを警告します。つまり、宣言が変数定義のように見えても、C++言語では関数宣言として解釈される必要がある場合です。
-
アーキテクチャー固有の改善
64 ビット ARM アーキテクチャー
-
Armv8-R アーキテクチャーは、
-march=armv8-r
オプションでサポートされています。 - GCC は、加算、減算、乗算、および複素数の累積と減算を行う演算を自動ベクトル化することができます。
AMD アーキテクチャーおよび Intel 64 ビットアーキテクチャー
-
Intel AVX-VNNI の新しい ISA 拡張サポートが追加されました。
-mavxvnni
コンパイラースイッチは、AVX-VNNI の組込みを制御します。 -
znver3 コアを搭載した AMD CPU は、新たな
-march=znver3
オプションによりサポートされます。 -
x86-64 psABI サプリメントで定義されている 3 つのマイクロアーキテクチャーレベルは、新しい
-march=x86-64-v2
、-march=x86-64-v3
、および-march=x86-64-v4
オプションでサポートされています。
IBM Z アーキテクチャー
- GCC 11.2.1 はデフォルトで IBM z14 プロセッサーに設定されます。
IBM Power Systems
- GCC 11.2.1 はデフォルトで IBM POWER9 プロセッサーに設定されます。
-
GCC コンパイラーが、新しい
-mcpu=power10
コマンドラインオプションを使用して POWER10 命令をサポートするようになりました。
(BZ#1986836, BZ#1870016, BZ#1870025, BZ#1870028, BZ#2019811, BZ#2047296)
glibc
最適化データをキャプチャーするための新しいコマンド
新しい ld.so --list-diagnostics
コマンドは、IFUNC の選択や glibc-hwcaps
の設定など、glibc
の最適化の決定に影響を与えるデータを単一の機械可読ファイルにキャプチャーします。
binutils
への主な変更点
RHEL 9 では、binutils
に以下の変更が加えられています。
-
binutils
は Intel の AMX/TMUL 命令セットに対応するようになり、この新機能を活用できるアプリケーションのパフォーマンスが向上しました。 - アセンブラー、リンカー、およびその他のバイナリーユーティリティーが、POWER10 命令をサポートするようになりました。
(BZ#2030554, BZ#1870021)
sched_getcpu
の実装では、オプションで rseq
(再起動可能なシーケンス) を使用して、64 ビット ARM アーキテクチャーおよびその他のアーキテクチャーでのパフォーマンスを向上できるようになる
64 ビット ARM アーキテクチャーでの sched_getcpu
の以前の実装では、getcpu
システムコールを使用しますが、これはほとんどの並列アルゴリズムで効率的に使用するには遅すぎます。他のアーキテクチャーでは、vDSO (仮想動的共有オブジェクト) アクセラレーションを使用してこれを回避します。rseq
を使用して sched_getcpu
を実装すると、64 ビット ARM アーキテクチャーのパフォーマンスが大幅に改善されます。他のアーキテクチャーではわずかな改善が見られます。
sched_getcpu
が rseq
を使用するように設定するには、GLIBC_TUNABLES=glibc.pthread.rseq=1
環境変数を設定します。
# GLIBC_TUNABLES=glibc.pthread.rseq=1 # export GLIBC_TUNABLES
パフォーマンスツールとデバッガーの更新
RHEL 9.0 では、以下のパフォーマンスツールおよびデバッガーが利用できます。
- GDB 10.2
- Valgrind 3.18.1
- SystemTap 4.6
- Dyninst 11.0.0
- elfutils 0.186
(BZ#2019806)
IBM POWER10 の GDB で DAWR 機能が改善
RHEL 9 には、改善された DAWR 機能を提供する GDB 10.2 が同梱されています。IBM POWER10 プロセッサーでは、新しいハードウェアウォッチポイント機能が GDB で有効になりました。たとえば、DAWR/DAWRX レジスターの新しいセットが追加されました。
(BZ#1870029)
GDB が、IBM POWER10 で接頭辞が付けられた新しい命令に対応
GDB 10.2 は、POWER10 で Power ISA 3.1 の接頭辞が付いた命令に完全に対応しています。これには、8 バイトの接頭辞が付いた命令が含まれます。RHEL 8.4 では、GDB は 4 バイトの命令のみに対応していました。
(BZ#1870031)
RHEL 9 は ブースト
1.75.0 を提供します
RHEL 9 には、boost
パッケージのバージョン 1.75.0 が同梱されています。バージョン 1.67.0 への主なバグ修正および機能強化は、以下のとおりです。
-
Boost.Signals
ライブラリーが削除され、header-onlyBoost.Signals2
コンポーネントに置き換えられました。 -
boost-jam
パッケージのbjam
ツールは、boost-b2
パッケージのb2
に置き換えられました。 新しいライブラリー:
-
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 は LLVM Toolset 13.0.1 を提供します。
RHEL 9 には、LLVM Toolset バージョン 13.0.1 が同梱されています。バージョン 12.0.1 への主なバグ修正および機能強化は、以下のとおりです。
-
Clang は、C++ のステートメント属性
[[clang::musttail]]
および C の__attribute__((musttail))
をサポートするようになりました。 -
Clang は、
-Wreserved-identifier
警告をサポートするようになりました。これは、コードで予約済み識別子を使用するときに開発者に警告します。 -
Clang の
-Wshadow
フラグは、シャドウされた構造化バインディングもチェックするようになりました。 -
Clang の
-Wextra
は、-Wnull-pointer-subtraction
も意味するようになりました。 -
Clang は、C++ のステートメント属性
[[clang::musttail]]
および C の__attribute__((musttail))
をサポートするようになりました。
RHEL 9 では、llvm-toolset
を RPM パッケージとして簡単にインストールできます。
(BZ#2001107)
CMake 3.20.2 における主な変更点
RHEL 9 には CMake 3.20.2 が同梱されています。バージョン 3.20.2 以前を必要とするプロジェクトで CMake を使用するには、cmake_minimum_required
(バージョン 3.20.2) コマンドを使用します。
主な変更点は、以下のとおりです。
-
C++23 コンパイラーモードは、ターゲットプロパティー
CXX_STANDARD
、CUDA_STANDARD
、OBJCXX_STANDARD
、またはコンパイル機能のcxx_std_23
メタ機能を使用して指定できるようになりました。 - CUDA 言語サポートにより、NVIDIA CUDA コンパイラーをシンボリックリンクにすることができるようになりました。
-
Intel oneAPI NextGen LLVM コンパイラー ID が、
IntelLLVM
コンパイラー ID で対応されるようになりました。 - Cmake は、Android NDK のツールチェーンファイルとマージすることで、Android のクロスコンパイルを容易にします。
-
cmake(1)
を実行してプロジェクトビルドシステムを生成すると、ハイフンで始まる不明なコマンドライン引数が拒否されるようになりました。
新機能および非推奨になった機能の詳細は、CMake Release Notes を参照してください。
(BZ#1957948)
RHEL 9 では Go 1.17.7 が提供されます。
RHEL 9 には、Go Toolset バージョン 1.17.7 が同梱されています。バージョン 1.16.7 への主なバグ修正および機能強化は、以下のとおりです。
- スライスを配列ポインターに変換するオプションを追加しました。
- //go:build 行のサポートを追加しました。
- amd64 での関数呼び出しのパフォーマンスを改善しました。
- 関数引数を、スタックトレースでより明確にフォーマットしました。
- クロージャーを含む関数をインライン化できるようにしました。
- x509 証明書の解析におけるリソース消費を削減しました。
RHEL 9 では、go-toolset
を RPM パッケージとして簡単にインストールできます。
(BZ#2014087)
Go FIPS モードは OpenSSL 3 でサポートされています。
Go FIPS モードの場合に OpenSSL 3 ライブラリーを使用できるようになりました。
RHEL 9 は Rust Toolset 1.58.1 を提供
RHEL 9 には、Rust Toolset バージョン 1.58.1 が同梱されています。バージョン 1.54.0 への主なバグ修正および機能強化は、以下のとおりです。
-
Rust コンパイラーは、クロージャーの disjoint キャプチャー、配列の
IntoIterator
、新しい Cargo 機能リゾルバーなどを備えた 2021 年版の言語をサポートするようになりました。 - 新しいカスタムプロファイルの Cargo サポートが追加されました。
- Cargo はコンパイラーエラーを重複排除します。
- 新しいオープンレンジパターンが追加されました。
- フォーマット文字列にキャプチャーされた識別子を追加しました。
詳細は、Rust 1.55 Rust 1.56 Rust 1.57 Rust 1.58 を参照してください。
RHEL 9 では、RPM パッケージとして rust-toolset
を簡単にインストールできます。
(BZ#2002885)
RHEL 9 は、pcp
パッケージのバージョン 5.3.5 を提供します。
RHEL 9 には、Performance Co-Pilot (pcp
) パッケージバージョン 5.3.5 が同梱されています。バージョン 5.3.1 以降、新しい pcp-pmda-bpf
サブパッケージが追加され、BPF CO-RE (libbpf
および BTF
) を利用する eBPF
プログラムからのパフォーマンスデータを提供します。
PCP の SQL Server メトリックにアクセスするための Active Directory 認証
今回の更新で、システム管理者は、Active Directory AD) 認証を使用して SQL Server メトリックに安全に接続するように pmdamssql(1)
を設定できるようになりました。
新しい pcp-ss
PCP ユーティリティーが利用可能に
pcp-ss
PCP ユーティリティーは、pmdasockets(1)
PMDA が収集したソケット統計を報告します。このコマンドは、多くの ss
コマンドラインオプションとレポート形式と互換性があります。また、ライブモードのローカルまたはリモート監視と、以前に記録された PCP アーカイブからの過去の再生の利点も提供します。
RHEL 9 は grafana
7.5.11 を提供します。
RHEL 9 には、grafana
パッケージバージョン 7.5.11 が同梱されています。バージョン 7.5.9 への主な変更点は、以下のとおりです。
-
新しいデータフレーム形式をサポートしないパネルの下位互換性のために、新しい
prepare time series
変換が追加されました。 - パスワードリセットトークンを生成するために、SHA-1 の代わりに HMAC-SHA-256 を使用するようにパスワードリカバリー機能を更新。
RHEL 9 は grafana-pcp
3.2.0 を提供します。
RHEL 9 には、grafana-pcp
パッケージバージョン 3.2.0 が同梱されています。バージョン 3.1.0 への主なバグ修正および機能強化は、以下のとおりです。
- PCP Redis 用の新しい MS SQL サーバーダッシュボードに追加
- PCP Vector eBPF/BCC 概要ダッシュボードに空のヒストグラムバケットの可視性を追加しました。
-
PCP Redis の
metric()
関数がすべてのメトリック名を返さないバグを修正しました。
grafana-pcp
の Vector データソース用に中央 pmproxy
経由でリモートホストにアクセスする
一部の環境では、ネットワークポリシーでは、Dashboard ビューアーのブラウザーから監視するホストに直接接続が許可されません。今回の更新で、中央 pmproxy
に接続するために hostspec
をカスタマイズできるようになりました。これにより、個々のホストにリクエストを転送できるようになりました。
新規パッケージ: ansible-pcp
ansible-pcp
パッケージには、RHEL システムロール metrics
の実装に使用される Performance Co-Pilot (PCP) と関連ソフトウェア (Redis、Grafana など) のロールが含まれています。
(BZ#1957566)
RHEL 9 は python-jsonpointer
2.0 を提供します。
RHEL 9 には、python-jsonpointer
パッケージバージョン 2.0 が同梱されています。
バージョン 1.9 への主な変更点は、以下のとおりです。
- Python バージョン 2.6 および 3.3 は非推奨になりました。
-
python-jsonpointer
モジュールは、無効なエスケープシーケンスのポインターを自動的に確認するようになりました。 - コマンドラインでポインターを引数として記述できるようになりました。
- URL エンコード形式でポインターを送信することはできなくなりました。
.NET 6.0 が利用可能です。
RHEL 9 には .NET バージョン 6.0 が同梱されています。以下は、主な改善点です。
- 64 ビット Arm (aarch64) に対応
- IBM Z および LinuxONE (s390x) に対応
詳細は、.NET 6.0 RPM パッケージリリースノート および .NET 6.0 コンテナーリリースノート を参照してください。
.NET 6.0 は、この Application Stream の初期バージョンであり、RPM パッケージとして簡単にインストールできます。.NET 6.0 では、RHEL 9 よりもライフサイクルが短くなります。詳細は、Red Hat Enterprise Linux Application Streams ライフサイクル を参照してください。
(BZ#1986211)
RHEL 9 の Java 実装
RHEL 9 AppStream リポジトリーには、以下が含まれます。
-
java-17-openjdk
パッケージ。OpenJDK 17 Java Runtime Environment および OpenJDK 17 Java Software Development Kit を提供します。 -
java-11-openjdk
パッケージ。OpenJDK 11 Java Runtime Environment および OpenJDK 11 Java Software Development Kit を提供します。 -
java-1.8.0-openjdk
パッケージ。OpenJDK 8 Java Runtime Environment および OpenJDK 8 Java Software Development Kit を提供します。
詳細は、OpenJDK のドキュメント を参照してください。
(BZ#2021262)
RHEL 9 の Java ツール
RHEL 9 AppStream リポジトリーには、以下の Java ツールが同梱されています。
-
ソフトウェアプロジェクトマネジメントおよび理解ツールである
Maven 3.6.3
-
Java アプリケーションのコンパイル、アセンブル、テスト、および実行を行う Java ライブラリーおよびコマンドラインツールである
Ant 1.10.9
Maven3.6
と Ant1.10
は、これらのアプリケーションストリームの初期バージョンであり、非モジュラー RPM パッケージとして簡単にインストールできます。
(BZ#1951482)
CRB リポジトリーで利用可能な SWIG 4.0
Simplified Wrapper and Interface Generator (SWIG) バージョン 4.0 は、CodeReady Linux Builder (CRB) リポジトリーで利用できます。本リリースでは、PHP 8
のサポートが追加されました。
RHEL 9 では、SWIG
を RPM パッケージとして簡単にインストールできます。
CodeReady Linux Builder リポジトリーに含まれるパッケージには対応しないことに注意してください。
(BZ#1943580)