付録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句のalignとallocator修飾子、およびアトミック拡張。
C ファミリー
新しい機能と属性:
-
clang 言語拡張と互換性のある
__builtin_shufflevectorビルトインのサポート。 -
unavailable属性のサポート。 -
新しい組み込み関数
__builtin_assoc_barrierは、浮動小数点式の再関連付けを禁止するために使用されます。 -
clang 言語拡張と互換性のある
__builtin_dynamic_object_sizeビルトインのサポート。
-
clang 言語拡張と互換性のある
新しい警告:
-
-Wbidi-charsは、誤解を招く可能性のある UTF-8 双方向制御文字について警告します。デフォルトは-Wbidi-chars=unpairedです。 -
-Warray-compareは、配列型の 2 つのオペランド間の比較について警告します。
-
警告の強化:
-
-Wattributesが拡張されたため、-Wno-attributes=ns::attrまたは-Wno-attributes=ns::を使用して、C++11 および C2X で不明なスコープ属性に関する警告を抑制することができるようになりました。同様に、#pragmaGCC diagnosticignored_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: 配列へのポインターと参照の自動指定子
-
P1938R3:
-
新しいコマンドラインオプション
-fimplicit-constexprは、インライン関数を暗黙的にconstexprにするために使用されます。 -
新しいコマンドラインオプション
-ffold-simple-inlinesは、std::move、std::forward、std::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警告は、より多くの場合に警告するように拡張されています。
-
次の C++ 言語の不一致に対する新しい警告オプション:
Red Hat Developer Toolset 12.1 の新しい C++ 機能の詳細は、Red Hat Developers の記事 を参照してください。
ランタイムライブラリー libstdC++
以下の実験的な C++20 サポート機能が改善されました。
-
std::vector、std::basic_string、std::optional、およびstd::variantをconstexpr関数で使用できるようになりました。 -
デフォルトの初期化を伴う配列の
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_ptrをconstexpr関数で使用できるようになりました。 -
<stacktrace>(デフォルトではビルドされません。追加のライブラリーへのリンクが必要です)。 -
<stdatomic.h> -
std::invoke_r -
constexprstd::type_info::operator==
-
アーキテクチャー固有の改善
64 ビット ARM アーキテクチャー
-
-mcpuおよび-mtuneオプションにより、多数の新しい CPU がサポートされます。 -
2020 Arm アーキテクチャー拡張からのアクセラレーターメモリーの 64 バイトアトミックロード/ストア組み込み関数は、
+ls64オプション拡張によってサポートされます。 -
初期コード生成サポートは、
memcpy、memmove、および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) に対する緩和がサポートされます。