GCC 16がリリースされました
7時間前原文(gcc.gnu.org)
概要
- GCC 16の主な新機能や変更点のまとめ
- Solaris向けの非互換変更点への注意喚起
- 最適化・ベクトル化の強化やドキュメントの改良
- C++20がデフォルト標準、C++23/26の一部機能も実装
- OpenMP/OpenACC/Ada/Fortranなど各言語の拡張と改善
GCC 16の主な変更点・新機能
- int8_tなどの型がSolarisでsigned charに変更、C99準拠のための非互換対応
- -pthreadオプションがSolarisで_REENTRANTを自動定義しなくなった
- -fdiagnostics-format=json形式が削除、機械可読な診断はSARIF利用推奨
最適化・ベクトル化の改善
- Link-Time Optimizationがtoplevel asm文をより適切に処理
- Speculative devirtualizationが一般的な間接関数呼び出しに対応、複数ターゲットの推測も可能
- ベクトル化がループ内の並列性やカウント不能ループにも対応
- **アラインメントの剥離(peeling)**やマスキングによる柔軟なループ最適化
- 早期breakを含むループで効率的なコード生成
ドキュメントの刷新
- コマンドオプションや属性のドキュメントが整理・近代化
- パラメータ・オプション仕様ファイルの説明をGCC内部マニュアルへ移動
- 属性インデックスの新設
言語ごとの拡張・改善
OpenMP
- CUDA APIによるメモリアロケータ強化、Nvidia GPUでの性能向上
- ompx_gnu_managed_mem_allocなど新アロケータ追加、ホスト側でデバイスアクセス可能なメモリ確保
- OpenMP 5.0/5.1/5.2/6.0/TR14の機能追加やAPI拡張
- 非推奨構文利用時の警告表示(-Wno-deprecated-openmpで抑制可能)
OpenACC
- acc_memcpy_deviceやacc_memcpy_device_async APIの追加
- OpenACC 3.0/3.3/3.4対応の拡張、Fortranでの定数利用も許可
Ada
- Constructor/Destructor拡張による新しい構築・終了メカニズム
- Implicit withやStructural Generic instantiationなどの新機能
- Extended_Accessで他言語連携や配列スライス対応
- VASTによるセマンティックツリーチェック機能
- Ada 2022の機能強化やAndroidサポート向上
C++
- C++20がデフォルト標準(-std=gnu++20)、古い標準利用時は明示指定が必要
- C++26/C++23の一部機能実装(Reflection, Contracts, Structured bindings等)
- エラーメッセージの階層・インデント表示、従来形式への切り替えも可能
- C++20モジュールの実験的サポート強化(--compile-std-moduleなど)
- **標準ライブラリ(libstdc++)**でのABI変更や新機能追加
- std::variant ABIのC++20準拠化
- std::regexがヒープベーススタック利用で大規模文字列対応
- C++20/23/26の新コンポーネント対応(std::simd, std::inplace_vector等)
Fortran
- Coarrayによる共有メモリマルチスレッド対応
- Fortran 2003のパラメータ化派生型サポート強化
非互換・注意点
- Solarisでの型やオプションの変更による移植性への注意
- C++20のサポートはGCC 16以前と互換性がない場合あり
- std::variantなど一部ABI変更により、既存コードの動作・バイナリ互換性への影響
参考情報
- Porting to GCC 16ページやGCC公式ドキュメントで詳細確認推奨
- 各言語・機能ごとの詳細は該当Wikiやリリースノート参照