Keluaran suite pengkompil GCC 13

Selepas setahun pembangunan, suite pengkompil percuma GCC 13.1 telah dikeluarkan, keluaran penting pertama dalam cawangan GCC 13.x baharu. Selaras dengan skim penomboran keluaran baharu, versi 13.0 telah digunakan dalam proses pembangunan, dan sejurus sebelum keluaran GCC 13.1, cawangan GCC 14.0 telah pun bercabang, dari mana keluaran utama seterusnya, GCC 14.1, akan dibentuk.

Perubahan utama:

  • GCC termasuk bahagian hadapan untuk memasang atur cara dalam bahasa pengaturcaraan Modula-2. Himpunan kod yang sepadan dengan dialek PIM2, PIM3 dan PIM4, serta standard ISO yang diterima untuk bahasa tertentu, disokong.
  • Bahagian hadapan dengan pelaksanaan pengkompil bahasa Rust yang disediakan oleh projek gccrs (GCC Rust) telah ditambahkan pada pepohon sumber GCC. Dalam bentuk semasanya, hujung hadapan ditandakan sebagai percubaan dan dilumpuhkan secara lalai. Setelah bahagian hadapan sedia (dijangka dalam keluaran seterusnya), alatan GCC standard boleh digunakan untuk menyusun atur cara dalam bahasa Rust tanpa perlu memasang pengkompil rustc, dibina menggunakan pembangunan LLVM.
  • Enjin Pengoptimuman Masa Pautan (LTO) telah menambah sokongan untuk pelayan pekerjaan yang disokong oleh projek pembuatan GNU untuk mengoptimumkan pelaksanaan binaan selari merentas berbilang rangkaian. Dalam GCC, jobserver digunakan untuk menyelaraskan kerja semasa pengoptimuman LTO dalam konteks keseluruhan program (WPA, Whole-program Analysis). Untuk berinteraksi dengan jobserver, paip bernama digunakan secara lalai (-jobserver-style=fifo).
  • Penganalisis statik (-fanalyzer) menawarkan 20 semakan diagnostik baharu, termasuk "-Wanalyzer-luar-had", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Keupayaan untuk mengeluarkan diagnostik dalam format SARIF, berdasarkan JSON, telah dilaksanakan. Format baharu boleh digunakan untuk mendapatkan keputusan analisis statik (GCC -fanalyzer), serta mendapatkan maklumat amaran dan ralat. Pendayaan dilakukan dengan pilihan "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", dengan pilihan dengan "json" menghasilkan output dalam varian khusus GCC bagi format JSON .
  • Melaksanakan beberapa ciri yang ditakrifkan dalam standard C23 C, seperti pemalar nullptr untuk mentakrifkan penunjuk nol, memudahkan penggunaan senarai variadik, mengembangkan keupayaan penghitungan, atribut noreturn, membenarkan penggunaan constexpr dan auto apabila mentakrifkan objek, jenis dan typeof_unqual, kata kunci baharu alignas, alignof, bool, false, static_assert, thread_local dan true, membenarkan kurungan kosong ditentukan semasa pemula.
  • Melaksanakan beberapa ciri yang ditakrifkan dalam standard C++23, seperti keupayaan untuk meletakkan tanda pada penghujung ungkapan kompaun, keserasian dengan jenis char8_t, arahan prapemproses #warning, dibatasi (\u{}, \o{}, \x{}) dan dinamakan ('\N{HURUF BESAR LATIN A}') jujukan pelarian, pengendali statik(), pengendali statik[], ungkapan dalam pengendali kesamaan, penghapusan beberapa sekatan ke atas penggunaan constexpr, sokongan untuk UTF -8 dalam teks sumber.
  • libstdc++ telah menambah baik sokongan percubaan untuk piawaian C++20 dan C++23, contohnya, menambah sokongan fail pengepala dan std::format, keupayaan fail pengepala diperluas , jenis titik terapung tambahan ditambah, fail pengepala dilaksanakan Dan .
  • Menambahkan atribut fungsi baharu pada dokumen bahawa deskriptor fail dihantar dalam pembolehubah integer: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" dan "__attribute__((fd_arg_write(N))) )" Atribut yang ditentukan boleh digunakan dalam penganalisis statik (-fanalyzer) untuk mengesan operasi yang salah dengan deskriptor fail.
  • Menambahkan atribut baharu "__attribute__((assume(EXPR)))", yang dengannya anda boleh memberitahu pengkompil bahawa ungkapan itu benar dan pengkompil boleh menggunakan fakta ini tanpa menilai ungkapan.
  • Menambahkan bendera "-fstrict-flex-arrays=[level]" untuk memilih gelagat apabila mengendalikan elemen tatasusunan fleksibel dalam struktur (Ahli Tatasusunan Fleksibel, tatasusunan saiz tidak tentu pada penghujung struktur, contohnya, "int b[]" ).
  • Menambahkan bendera "-Wenum-int-mismatch" untuk memberi amaran jika terdapat ketidakpadanan antara jenis enum dan jenis integer.
  • Bahagian hadapan untuk bahasa Fortran menyokong sepenuhnya pemuktamadan.
  • Di bahagian hadapan untuk bahasa Go, sokongan untuk fungsi dan jenis generik (generik) telah ditambah dan keserasian dengan pakej untuk bahasa Go 1.18 telah dipastikan.
  • Bahagian belakang untuk seni bina AArch64 menyokong 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). Menambah sokongan untuk argumen "armv9.1-a", "armv9.2-a" dan "armv9.3-a" pada pilihan "-march=". Menambah sokongan untuk sambungan pemproses FEAT_LRCPC, FEAT_CSSC dan FEAT_LSE2.
  • Sokongan untuk CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) dan Arm Cortex-M85 (cortex-m85) telah ditambahkan pada bahagian belakang untuk seni bina ARM.
  • Bahagian belakang untuk seni bina x86 menambah sokongan untuk Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, pemproses Granite Rapids, serta pemproses AMD Zen 4 (znver4). Sambungan seni bina set arahan AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT dan AMX-COMPLEX, yang dicadangkan dalam pemproses Intel, telah dilaksanakan. Untuk bahasa C dan C++ pada sistem SSE2, jenis __bf16 disediakan.
  • Bahagian belakang penjanaan kod untuk GPU AMD Radeon (GCN) termasuk keupayaan untuk menggunakan pemecut AMD Instinct MI200 untuk meningkatkan prestasi OpenMP/OpenACC. Vektorisasi dipertingkat menggunakan arahan SIMD.
  • Keupayaan bahagian belakang untuk platform LoongArch telah diperluaskan dengan ketara.
  • Di bahagian belakang untuk seni bina RISC-V, sokongan untuk CPU XuanTie C906 (thead-c906) T-Head telah ditambah. Sokongan untuk pemproses vektor yang ditakrifkan dalam spesifikasi RISC-V Vector Extension Intrinsic 0.11 telah dilaksanakan. Menambah sokongan untuk 30 sambungan pada spesifikasi RISC-V.
  • Menjana objek kongsi dengan pilihan -shared berhenti menambah kod permulaan selepas menambah persekitaran titik terapung jika pengoptimuman -Ofast, -ffast-math atau -funsafe-math-didayakan.
  • Sokongan untuk format nyahpepijat DWARF dilaksanakan dalam hampir semua konfigurasi.
  • Menambahkan pilihan "-gz=zstd" untuk memampatkan maklumat penyahpepijatan menggunakan algoritma Zstandard. Sokongan untuk mod mampatan penyahpepijatan "-gz=zlib-gnu" lama telah dihentikan.
  • Menambah sokongan awal untuk OpenMP 5.2 (Pemprosesan Berbilang Terbuka) dan pelaksanaan berterusan piawaian OpenMP 5.0 dan 5.1, yang mentakrifkan API dan kaedah untuk menggunakan kaedah pengaturcaraan selari pada sistem berbilang teras dan hibrid (CPU+GPU/DSP) dengan memori dikongsi dan unit vektorisasi (SIMD).
  • Sokongan untuk format storan maklumat penyahpepijatan "STABS" lama (didayakan dengan pilihan -gstabs dan -gxcoff), yang dicipta pada tahun 1980-an dan digunakan dalam penyahpepijat dbx, telah dihentikan.
  • Sokongan untuk Solaris 11.3 telah ditamatkan (kod untuk menyokong platform ini akan dialih keluar dalam keluaran akan datang).

Sumber: opennet.ru

Tambah komen