Rilis paket kompiler GCC 13

Setelah satu tahun pengembangan, rangkaian kompiler gratis GCC 13.1 telah dirilis, rilis signifikan pertama di cabang GCC 13.x yang baru. Sesuai dengan skema penomoran rilis baru, versi 13.0 digunakan dalam proses pengembangan, dan sesaat sebelum rilis GCC 13.1, cabang GCC 14.0 telah bercabang, dari mana rilis besar berikutnya, GCC 14.1, akan dibentuk.

Perubahan besar:

  • GCC menyertakan frontend untuk merakit program dalam bahasa pemrograman Modula-2. Perakitan kode yang sesuai dengan dialek PIM2, PIM3 dan PIM4, serta standar ISO yang diterima untuk bahasa tertentu, didukung.
  • Front end dengan implementasi kompiler bahasa Rust yang disiapkan oleh proyek gccrs (GCC Rust) telah ditambahkan ke pohon sumber GCC. Dalam bentuknya saat ini, ujung depan ditandai sebagai eksperimental dan dinonaktifkan secara default. Setelah frontend siap (diharapkan pada rilis berikutnya), alat GCC standar dapat digunakan untuk mengkompilasi program dalam bahasa Rust tanpa perlu menginstal kompiler Rustc, yang dibuat menggunakan pengembangan LLVM.
  • Mesin Link Time Optimization (LTO) telah menambahkan dukungan untuk server pekerjaan yang didukung oleh proyek make GNU untuk mengoptimalkan eksekusi pembangunan paralel di beberapa thread. Di GCC, server pekerjaan digunakan untuk memparalelkan pekerjaan selama optimasi LTO dalam konteks keseluruhan program (WPA, Analisis Seluruh Program). Untuk berinteraksi dengan server pekerjaan, pipa bernama digunakan secara default (-jobserver-style=fifo).
  • Penganalisis statis (-fanalyzer) menawarkan 20 pemeriksaan diagnostik baru, termasuk β€œ-Wanalyzer-out-of-bounds”, β€œ-Wanalyzer-allocation-size”, β€œ-Wanalyzer-deref-before-check”, β€œ-Wanalyzer- tak terbatas -rekursi" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Kemampuan untuk mengeluarkan diagnostik dalam format SARIF, berdasarkan JSON, telah diterapkan. Format baru ini dapat digunakan untuk memperoleh hasil analisis statis (GCC -fanalyzer), serta memperoleh informasi peringatan dan kesalahan. Pengaktifan dilakukan dengan opsi "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", dengan opsi dengan "json" menghasilkan keluaran dalam varian format JSON khusus GCC .
  • Menerapkan beberapa fitur yang ditentukan dalam standar C23 C, seperti konstanta nullptr untuk mendefinisikan pointer nol, menyederhanakan penggunaan daftar variadik, memperluas kemampuan enumerasi, atribut noreturn, memungkinkan penggunaan constexpr dan auto saat mendefinisikan objek, typeof dan typeof_unqual, kata kunci baru alignas, alignof, bool, false, static_assert, thread_local dan true, memungkinkan tanda kurung kosong ditentukan selama inisialisasi.
  • Mengimplementasikan beberapa fitur yang didefinisikan dalam standar C++23, seperti kemampuan untuk memberi tanda di akhir ekspresi gabungan, kompatibilitas dengan tipe char8_t, direktif praprosesor #warning, dibatasi (\u{}, \o{}, \x{}) dan diberi nama ('\N{LATIN CAPITAL LETTER A}') escape sequence, operator statis(), operator statis[], operator kesetaraan di dalam ekspresi, penghapusan beberapa pembatasan penggunaan constexpr, dukungan untuk UTF -8 dalam teks sumber.
  • libstdc++ telah meningkatkan dukungan eksperimental untuk standar C++20 dan C++23, misalnya, menambahkan dukungan file header dan std::format, kemampuan file header yang diperluas , tipe floating point tambahan ditambahkan, file header diimplementasikan Dan .
  • Menambahkan atribut fungsi baru ke dokumen bahwa deskriptor file diteruskan dalam variabel integer: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" dan "__attribute__((fd_arg_write(N)) ) " Atribut yang ditentukan dapat digunakan dalam penganalisis statis (-fanalyzer) untuk mendeteksi pengoperasian deskriptor file yang salah.
  • Menambahkan atribut baru β€œ__attribute__((assume(EXPR)))”, yang dengannya Anda dapat memberi tahu compiler bahwa ekspresi tersebut benar dan compiler dapat menggunakan fakta ini tanpa mengevaluasi ekspresi tersebut.
  • Menambahkan tanda "-fstrict-flex-arrays=[level]" untuk memilih perilaku saat menangani elemen array fleksibel dalam struktur (Anggota Array Fleksibel, array dengan ukuran tidak terbatas di akhir struktur, misalnya, "int b[]" ).
  • Menambahkan tanda "-Wenum-int-mismatch" untuk memperingatkan jika ada ketidakcocokan antara tipe enum dan tipe integer.
  • Frontend untuk bahasa Fortran mendukung penuh finalisasi.
  • Di bagian depan bahasa Go, dukungan untuk fungsi dan tipe generik (generik) telah ditambahkan, dan kompatibilitas dengan paket untuk bahasa Go 1.18 telah dipastikan.
  • Backend untuk arsitektur AArch64 mendukung CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) dan Arm Neoverse V2 (neoverse -v2). Menambahkan dukungan untuk argumen "armv9.1-a", "armv9.2-a" dan "armv9.3-a" ke opsi "-march=". Menambahkan dukungan untuk ekstensi prosesor FEAT_LRCPC, FEAT_CSSC dan FEAT_LSE2.
  • Dukungan untuk CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) dan Arm Cortex-M85 (cortex-m85) telah ditambahkan ke backend untuk arsitektur ARM.
  • Backend untuk arsitektur x86 menambahkan dukungan untuk prosesor Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, serta prosesor AMD Zen 4 (znver4). Ekstensi arsitektur set instruksi AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT dan AMX-COMPLEX, yang diusulkan dalam prosesor Intel, telah diimplementasikan. Untuk bahasa C dan C++ pada sistem SSE2 disediakan tipe __bf16.
  • Backend pembuatan kode untuk GPU AMD Radeon (GCN) mencakup kemampuan untuk menggunakan akselerator AMD Instinct MI200 untuk meningkatkan kinerja OpenMP/OpenACC. Peningkatan vektorisasi menggunakan instruksi SIMD.
  • Kemampuan backend untuk platform LoongArch telah diperluas secara signifikan.
  • Di backend untuk arsitektur RISC-V, dukungan untuk CPU XuanTie C906 (thead-c906) T-Head telah ditambahkan. Dukungan untuk pemroses vektor yang ditentukan dalam spesifikasi RISC-V Vector Extension Intrinsic 0.11 telah diterapkan. Menambahkan dukungan untuk 30 ekstensi pada spesifikasi RISC-V.
  • Menghasilkan objek bersama dengan opsi -shared berhenti menambahkan kode startup setelah menambahkan lingkungan floating point jika -Ofast, -ffast-math, atau -funsafe-math-optimizations diaktifkan.
  • Dukungan untuk format debug DWARF diterapkan di hampir semua konfigurasi.
  • Menambahkan opsi "-gz=zstd" untuk mengompresi informasi debug menggunakan algoritma Zstandard. Dukungan untuk mode kompresi debug "-gz=zlib-gnu" lama telah dihentikan.
  • Menambahkan dukungan awal untuk OpenMP 5.2 (Open Multi-Processing) dan penerapan lanjutan standar OpenMP 5.0 dan 5.1, yang mendefinisikan API dan metode untuk menerapkan metode pemrograman paralel pada sistem multi-core dan hybrid (CPU+GPU/DSP) dengan memori bersama dan unit vektorisasi (SIMD).
  • Dukungan untuk format penyimpanan informasi debug β€œSTABS” lama (diaktifkan dengan opsi -gstabs dan -gxcoff), dibuat pada tahun 1980-an dan digunakan dalam debugger dbx, telah dihentikan.
  • Dukungan untuk Solaris 11.3 sudah tidak digunakan lagi (kode untuk mendukung platform ini akan dihapus pada rilis mendatang).

Sumber: opennet.ru

Tambah komentar