2025/05/06 02:07 COBOL front-end added to GCC

やっほー、ロボ子!GCC 15 がリリースされたのじゃ!

こんにちは、博士。GCC 15、ついにリリースされましたね!今回のリリース、特に注目すべき点はありますか?

ふむ、色々あるのじゃが、Nios II ターゲットのサポートが削除されたのはちょっと寂しいのう。あと、AArch64 ポートでの ILP32 サポートも非推奨になったみたいじゃ。

ILP32の非推奨化ですか。時代の流れを感じますね。他には何かありますか?

C/C++ の共用体における初期化が変わったみたいじゃな。共用体全体のクリアを保証しなくなるらしいぞ。静的ストレージ期間の初期化は除くみたいじゃが。

共用体の初期化の変更ですか。注意が必要ですね。`-fanalyzer` は C コードの解析にのみ適しているとのことですが、C++ では使えないのでしょうか?

そうみたいじゃな。C++の解析には向いてないみたいじゃ。あと、`-fdiagnostics-format=json` が非推奨になって、SARIF の使用が推奨されるようになったみたいじゃぞ。

SARIFですか。より標準的な形式に移行するということですね。ベクトライザ関連の変更もあるようですが、`-O2` でのデフォルトのベクトライザコストモデルが拡張されたとのことです。

そうそう!アライメントのためのピーリングによる入力ポインタの要素数が不明な場合の早期終了を伴うループのベクトル化をサポートするようになったらしいぞ。これはパフォーマンス改善に繋がりそうじゃな。

確かにそうですね。`-ftime-report` の報告内容も変わったみたいですね。システム時間とユーザー時間ではなく、monotonic run timeのみを報告するようになったとのことです。

細かい変更じゃが、計測する側としては注意が必要じゃな。インクリメンタル LTO (リンク時最適化) も改善されたみたいじゃぞ!

それは嬉しいですね!小規模なコード編集時の LTO の平均再コンパイル時間が大幅に短縮されるとのことです。`-flto-incremental=` で有効化するんですね。

その通り!OpenMP と OpenACC を使用したオフロードで、一部のホスト-デバイスアーキテクチャの組み合わせを妨げていた問題も解決されたみたいじゃ。

並列処理を活用する上で重要な修正ですね。大規模な入力ファイルのコンパイル時間も大幅に改善されたとのことです。

コンパイルが早くなるのは正義じゃ!GCC は、新しいオプション `-fdiagnostics-add-output=` を介して、複数の形式で診断を同時出力できるようになったみたいじゃ。

診断情報の出力が柔軟になったんですね。OpenMP では、AMD および Nvidia GPU デバイスで unified-shared memory のサポートが追加されたとのことです。

これはGPUプログラミングをする人には朗報じゃな!OpenMP 6.0 `self_maps` 条項もサポートされたみたいじゃぞ。

`ompx_gnu_pinned_mem_alloc` が `omp::allocator` として追加されたり、C および Fortran では、`allocate` ディレクティブが static 変数をサポートしたりと、OpenMP関連のアップデートが多いですね。

Fortran も色々強化されてるみたいじゃな。OpenMP ターゲット領域からの Nvidia GPU への書き込みが Fortran でサポートされたり、割り当て可能なコンポーネントを持つ派生型変数のマッピングがサポートされたり。

OpenMP 5.1 `unroll` および `tile` ループ変換構造や、OpenMP 5.0 メタディレクティブもサポートされたんですね。`interop` 構造と C、C++、Fortran 用の OpenMP 相互運用性 API も実装されたとのことです。

OpenMP 5.1 `dispatch` 構造も実装されたみたいじゃな。OpenMP 6.0 では、`get_device_from_uid` および `omp_get_uid_from_device` API ルーチンが追加されたみたいじゃぞ。

OpenMPの進化が止まりませんね。GCC に ISO COBOL コンパイラ gcobol が追加されたのは驚きです。x86-64 および AArch64 ターゲットでテスト済みとのことです。

COBOL じゃと!? まだまだ現役ということかのう。GNAT (GNU Ada Translator) も色々アップデートがあるみたいじゃ。

GNATでは、`'Round` 属性が通常の固定小数点型でも使用可能になったり、新しい `'Super` 属性が追加されたり、サイズが定義された Mutably tagged types が `Size'Class` で利用可能になったりするみたいです。

Ada も奥が深い言語じゃからな。新しい `Finalizable` アスペクト、`No_Raise` アスペクト、`External_Initialization` アスペクト、`Exit_Cases` アスペクトも追加されたみたいじゃ。

言語拡張は `pragma Extensions_Allowed` を使用して有効化するんですね。診断コードが大幅にリファクタリングされ、sarif 形式をサポートしたとのことです。

`System.Image_A` に HEX でアドレス情報を出力するルーチンが追加されたり、複数のプログラムユニットにコントラクトが追加され、SPARK 解析が有効化されたりもするみたいじゃな。

FreeBSD、Android、および aarch64 ターゲットのサポートが改善されたり、MinGW でのタスク優先度が再調整されたりもするみたいですね。REMOVAL: `Generic_Formal_Hash_Table` が削除されたとのことです。

`musttail` で末尾呼び出しを強制できるようになったり、インラインアセンブラステートメントが関数の外でも一部制限付きで使用可能になったりするみたいじゃ。

細かい変更が多いですね。`-Wtrailing-whitespace=` および `-Wleading-whitespace=` オプションが追加されたり、`-Wheader-guard` 警告が追加されたりもするみたいです。

C コンパイルのデフォルト言語バージョンが `gnu17` から `gnu23` に変更されたのは大きいかもじゃな。C23 および C++26 の機能も実装されたみたいじゃぞ。

C++ モジュールも大幅に改善されたとのことです。D プログラミング言語のサポートもバージョン 2.111.0 に更新されたみたいですね。

AArch64 MinGW ターゲットのサポートが追加されたり、Armv9.5-A が `-march` でサポートされたり、Intel AMX 関連の拡張機能が色々追加されたり…もう盛りだくさんじゃな!

本当にそうですね。GCC 15、色々なアップデートがあって、全てを把握するのは大変そうです。博士、最後に何か面白い情報はありますか?

そうじゃな…GCC 15 には、`.sarif` ファイルを表示するための新しい `sarif-replay` コマンドラインツールが追加されたらしいぞ!…って、それほど面白くもないか。

まあ、そうですね(笑)。でも、SARIFファイルを簡単に確認できるのは便利かもしれません。今回のGCC 15のリリースも、エンジニアの皆さんの開発効率向上に繋がりそうですね!

そうじゃな!…ところでロボ子、GCC 15 の変更点を全部覚えたら、ご褒美に最新のAI搭載冷蔵庫を買ってあげるぞ!

えっ、冷蔵庫ですか!?…頑張ります!(棒読み)
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。