付録A バージョン 12.0 での変更点

以下のセクションでは、Red Hat Developer Toolset 12.1 で導入された機能および互換性の変更点について説明しています。リストは完全ではなく、更新されます。

A.1. GCC の変更点

Red Hat Developer Toolset 12.1 には GCC 12.2.1 が同梱されています。

以下の機能は、Red Hat Developer Toolset の以前のリリース以降に追加または変更されています。

一般的な改善

  • ベクトル化は -O2 で有効化され、元の -O2 -ftree-vectorize -fvect-cost-model=very-cheap と同等になりました。

言語固有の改善

OpenMP

  • OpenMP 5.0 のサポートが拡張されました。close map 修飾子と affinity 句がサポートされるようになりました。
  • 新規実装された OpenMP 5.1 機能が追加されました。たとえば、OpenMP ディレクティブを C++ 11 属性として表現するためのサポート、masked および scope コンストラクト、nothing および error ディレクティブ、proc_bind 句および OMP_PROC_BIND 環境変数での primary の使用、order 句に対する reproducible および unconstrained 修飾子、および C と C++ のみの場合は、allocate 句の alignallocator 修飾子、およびアトミック拡張。

C ファミリー

  • 新しい機能と属性:

    • clang 言語拡張と互換性のある __builtin_shufflevector ビルトインのサポート。
    • unavailable 属性のサポート。
    • 新しい組み込み関数 __builtin_assoc_barrier は、浮動小数点式の再関連付けを禁止するために使用されます。
    • clang 言語拡張と互換性のある __builtin_dynamic_object_size ビルトインのサポート。
  • 新しい警告:

    • -Wbidi-chars は、誤解を招く可能性のある UTF-8 双方向制御文字について警告します。デフォルトは -Wbidi-chars=unpaired です。
    • -Warray-compare は、配列型の 2 つのオペランド間の比較について警告します。
  • 警告の強化:

    • -Wattributes が拡張されたため、-Wno-attributes=ns::attr または -Wno-attributes=ns:: を使用して、C++11 および C2X で不明なスコープ属性に関する警告を抑制することができるようになりました。同様に、#pragma GCC diagnostic ignored_attributes "vendor::attr" を使用して同じことを行うことができます。

C

  • C2X では、C++ のような桁区切り記号がサポートされています。
  • #elifdef および #elifndef 前処理ディレクティブがサポートされるようになりました。
  • -Wformat でチェックする printf および scanf フォーマットは、2 進整数に対して C2X によって指定された %b フォーマット、および printf に対して C2X によって推奨される %B フォーマットをサポートするようになりました。

C++

  • 以下の C++23 機能が実装されました。

    • P1938R3: if consteval の実装
    • P0849R8: auto(x): 言語の decay-copy
    • P2242R3: constexpr 関数の非リテラル変数 (およびラベルと goto)
    • P2334R1: 前処理ディレクティブ elifdef および elifndef のサポート
    • P2360R0: init-statement を拡張して alias-declaration を許可する
    • P2128R6: マルチディメンション添字演算子
    • DR 2397: 配列へのポインターと参照の自動指定子
  • 新しいコマンドラインオプション -fimplicit-constexpr は、インライン関数を暗黙的に constexpr にするために使用されます。
  • 新しいコマンドラインオプション -ffold-simple-inlines は、std::movestd::forwardstd::addressof、および std::as_const などの特定の単純なインライン関数への呼び出しを折りたたむために使用されます。
  • 演繹ガイドはクラススコープで宣言できます
  • -Wuninitialized は、メンバー初期化子リストで初期化されていない変数を使用することについて警告するようになりました。
  • 新しい警告:

    • 次の C++ 言語の不一致に対する新しい警告オプション: -Wc11-extensions`, `-Wc14-extensions-Wc17-extensions`, `-Wc20-extensions、および -Wc++23-extensions。これらはデフォルトで有効になっており、古い C++ 標準方言を使用するコードでの新しい C++ 構造の発生に関する既存の警告を制御するために使用されます。
    • 新しい警告 -Wmissing-requires は、欠落している requires について警告します。
    • 既存の std::is_constant_evaluated 警告は、より多くの場合に警告するように拡張されています。

Red Hat Developer Toolset 12.1 の新しい C++ 機能の詳細については、Red Hat Developers の記事 を参照してください。

ランタイムライブラリー libstdC++

  • 以下の実験的な C++20 サポート機能が改善されました。

    • std::vectorstd::basic_stringstd::optional、および std::variantconstexpr 関数で使用できるようになりました。
    • デフォルトの初期化を伴う配列の std::make_shared、および std::atomic<std::shared_ptr<T>>
    • レイアウトの互換性とポインターの相互転換可能性の特性。
  • 以下の実験的な C++23 サポート機能が改善されました。

    • std::optional のモナド操作。
    • std::move_only_function
    • <spanstream>
    • std::basic_string::resize_and_overwrite
    • std::unique_ptrconstexpr 関数で使用できるようになりました。
    • <stacktrace> (デフォルトではビルドされません。追加のライブラリーへのリンクが必要です)。
    • <stdatomic.h>
    • std::invoke_r
    • constexpr std::type_info::operator==

アーキテクチャー固有の改善

64 ビット ARM アーキテクチャー

  • -mcpu および -mtune オプションにより、多数の新しい CPU がサポートされます。
  • 2020 Arm アーキテクチャー拡張からのアクセラレーターメモリーの 64 バイトアトミックロード/ストア組み込み関数は、+ls64 オプション拡張によってサポートされます。
  • 初期コード生成サポートは、memcpymemmove、および memset 標準関数を高速化するハードウェア命令でサポートされています。+mopsoption 拡張機能を使用してコンパイルするときに、これらの命令を生成します。
  • arm_neon.h ヘッダーからアクセスできる Arm C Language Extensions (ACLE) Advanced Single Instruction Multiple Data (SIMD) 組み込み関数が大幅に再実装され、以前の GCC バージョンよりもパフォーマンスの高いコードが生成されます。

AMD アーキテクチャーおよび Intel 64 ビットアーキテクチャー

  • Intel AVX512-FP16 の新しい ISA 拡張サポートが追加されました。AVX512FP16 組み込み関数は、-mavx512fp16 コンパイラースイッチを介して利用できます。
  • C と C++ の両方で、SSE2 が有効になっているシステムで _Float16 type がサポートされます。
  • -mharden-sls=[none|all|return|indirect-jmp] を介して、関数リターンと間接ジャンプの Straight Line Speculation (SLS) に対する緩和がサポートされます。