13.1 年間の開発を経て、新しい GCC 13.x ブランチの最初の重要なリリースである、無料のコンパイラ スイート GCC 13.0 がリリースされました。 新しいリリース番号付けスキームに従って、バージョン 13.1 が開発プロセスで使用され、GCC 14.0 のリリースの直前に、GCC 14.1 ブランチがすでに分岐しており、そこから次のメジャー リリースである GCC XNUMX が形成されます。
主な変更点:
- GCC には、Modula-2 プログラミング言語でプログラムをアセンブルするためのフロントエンドが含まれています。 方言 PIM2、PIM3、および PIM4 に対応するコードのアセンブリと、この言語で受け入れられている ISO 標準がサポートされています。
- gccrs プロジェクト (GCC Rust) によって準備された Rust 言語コンパイラの実装を備えたフロント エンドが GCC ソース ツリーに追加されました。 現在の形式では、フォワード エンドは実験的としてマークされ、デフォルトで無効になっています。 フロントエンドの準備が完了すると (次のリリースで予定されています)、標準の GCC ツールを使用して、LLVM 開発を使用して構築された Rustc コンパイラをインストールすることなく、Rust 言語でプログラムをコンパイルできます。
- リンク時間最適化 (LTO) エンジンは、複数のスレッドにわたる並列ビルドの実行を最適化するために、GNU make プロジェクトによってサポートされるジョブサーバーのサポートを追加しました。 GCC では、プログラム全体 (WPA、プログラム全体分析) のコンテキストで LTO 最適化中に作業を並列化するためにジョブサーバーが使用されます。 jobserver と対話するには、デフォルトで名前付きパイプが使用されます (-jobserver-style=fifo)。
- 静的アナライザー (-fanalyzer) は、「-Wanalyzer-out-of-bounds」、「-Wanalyzer-allocation-size」、「-Wanalyzer-deref-before-check」、「-Wanalyzer-infinite」を含む 20 の新しい診断チェックを提供します。 -recursion" -Wanalyzer-jump-through-null"、"-Wanalyzer-va-list-leak"。
- JSON に基づいて、SARIF 形式で診断を出力する機能が実装されました。 新しい形式は、静的解析結果 (GCC -fanalyzer) を取得したり、警告やエラー情報を取得したりするために使用できます。 有効化は、オプション「-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file」で行います。「json」を含むオプションは、JSON 形式の GCC 固有のバリアントで出力されます。 。
- NULL ポインターを定義するための nullptr 定数、可変個引数リストの使用の簡素化、列挙の機能の拡張、noreturn 属性、オブジェクト定義時の constexpr と auto の使用の許可、typeof など、C23 C 標準で定義されているいくつかの機能を実装しました。 typeof_unqual、新しいキーワード alignas、alignof、bool、false、static_assert、thread_local、true により、初期化中に空の括弧を指定できるようになります。
- 複合式の末尾にマークを配置する機能、char23_t 型との互換性、#warning プリプロセッサ ディレクティブ、区切り記号 (\u{}、\o{}、 \x{}) および名前付き ('\N{LATIN CAPITAL LETTER A}') エスケープ シーケンス、静的演算子()、静的演算子[]、式内の等価演算子、constexpr の使用に関する一部の制限の削除、UTF のサポート原文では-8。
- libstdc++ は、ヘッダー ファイルのサポートを追加するなど、C++20 および C++23 標準の実験的サポートを改善しました。 および std::format、拡張ヘッダー ファイル機能、追加の浮動小数点型が追加され、ヘッダー ファイルが実装されましたそして。
- ファイル記述子が整数変数で渡されることを文書化する新しい関数属性を追加しました: "__attribute__((fd_arg(N)))"、"__attribute__((fd_arg_read(N)))"、および "__attribute__((fd_arg_write(N)) )」 指定された属性を静的アナライザー (-fanalyzer) で使用すると、ファイル記述子の不正な操作を検出できます。
- 新しい属性「__attribute__((assume(EXPR)))」を追加しました。これを使用すると、式が true であることをコンパイラに伝えることができ、コンパイラは式を評価せずにこの事実を使用できます。
- 構造体 (フレキシブル配列メンバー、構造体の最後にある不定サイズの配列、たとえば「int b[]」) でフレキシブル配列要素を処理するときの動作を選択するための「-fstrict-flex-arrays=[level]」フラグを追加しました。 )。
- 列挙型と整数型の間に不一致がある場合に警告する「-Wenum-int-mismatch」フラグを追加しました。
- Fortran 言語のフロントエンドはファイナライゼーションを完全にサポートしています。
- Go 言語のフロントエンドでは、ジェネリック関数と型 (ジェネリック) のサポートが追加され、Go 言語 1.18 のパッケージとの互換性が確保されました。
- AArch64 アーキテクチャのバックエンドは、CPU Ampere-1A (ampere1a)、Arm Cortex-A715 (cortex-a715)、Arm Cortex-X1C (cortex-x1c)、Arm Cortex-X3 (cortex-x3)、および Arm Neoverse V2 (neoverse) をサポートします。 -v2)。 「-march=」オプションに「armv9.1-a」、「armv9.2-a」、および「armv9.3-a」引数のサポートが追加されました。 FEAT_LRCPC、FEAT_CSSC、および FEAT_LSE2 プロセッサー拡張機能のサポートが追加されました。
- CPU STAR-MC1 (star-mc1)、Arm Cortex-X1C (cortex-x1c)、および Arm Cortex-M85 (cortex-m85) のサポートが ARM アーキテクチャのバックエンドに追加されました。
- x86 アーキテクチャのバックエンドでは、Intel Raptor Lake、Meteor Lake、Sierra Forest、Grand Ridge、Emerald Rapids、Granite Rapids プロセッサ、および AMD Zen 4 (znver4) プロセッサのサポートが追加されています。 Intel プロセッサで提案されている命令セット アーキテクチャ拡張 AVX-IFMA、AVX-VNNI-INT8、AVX-NE-CONVERT、CMPccXADD、AMX-FP16、PREFETCI、RAO-INT、および AMX-COMPLEX が実装されています。 SSE2 システム上の C および C++ 言語の場合、__bf16 タイプが提供されます。
- AMD Radeon GPU (GCN) のコード生成バックエンドには、AMD Instinct MI200 アクセラレータを使用して OpenMP/OpenACC のパフォーマンスを向上させる機能が含まれています。 SIMD 命令を使用したベクトル化の改善。
- LoongArch プラットフォームのバックエンド機能が大幅に拡張されました。
- RISC-V アーキテクチャのバックエンドでは、T-Head の XuanTie C906 (thead-c906) CPU のサポートが追加されました。 RISC-V Vector Extension Intrinsic 0.11 仕様で定義されたベクトル プロセッサのサポートが実装されました。 RISC-V 仕様に 30 の拡張機能のサポートが追加されました。
- -Ofast、-ffast-math、または -funsafe-math-optimizations が有効になっている場合、-shared オプションを使用して共有オブジェクトを生成すると、浮動小数点環境を追加した後にスタートアップ コードの追加が停止します。
- DWARF デバッグ形式のサポートは、ほぼすべての構成に実装されています。
- Zstandard アルゴリズムを使用してデバッグ情報を圧縮するオプション「-gz=zstd」を追加しました。 従来の「-gz=zlib-gnu」デバッグ圧縮モードのサポートは廃止されました。
- OpenMP 5.2 (Open Multi-Processing) の初期サポートと、共有メモリを備えたマルチコアおよびハイブリッド (CPU+GPU/DSP) システムに並列プログラミング手法を適用するための API とメソッドを定義する OpenMP 5.0 および 5.1 標準の継続的な実装が追加されました。およびベクトル化ユニット (SIMD)。
- 1980 年代に作成され、dbx デバッガーで使用されていた従来の「STABS」デバッグ情報ストレージ形式 (-gstabs および -gxcoff オプションで有効) のサポートは廃止されました。
- Solaris 11.3 のサポートは廃止されました (このプラットフォームをサポートするコードは将来のリリースで削除される予定です)。
出所: オープンネット.ru