Keluaran suite pengkompil GCC 10

Selepas setahun pembangunan diterbitkan pelepasan set penyusun percuma GCC 10.1, keluaran utama pertama dalam cawangan GCC 10.x baharu. Sesuai dengan skim baru nombor keluaran, versi 10.0 telah digunakan dalam proses pembangunan, dan tidak lama sebelum keluaran GCC 10.1, cawangan GCC 11.0 telah pun bercabang, atas dasar keluaran penting seterusnya, GCC 11.1, akan dibentuk.

GCC 10.1 terkenal kerana pelaksanaan banyak inovasi dalam bahasa C++ yang dibangunkan untuk standard C++20, penambahbaikan yang berkaitan dengan standard bahasa C masa hadapan (C2x), pengoptimuman baharu dalam bahagian belakang pengkompil dan sokongan percubaan mod analisis statik. Di samping itu, semasa penyediaan cawangan baharu, projek itu memindahkan repositori dari SVN ke Git.

Utama perubahan:

  • Ditambah mod eksperimen analisis statik "-fanalyzerβ€œ, yang melakukan analisis antara prosedur intensif sumber bagi laluan pelaksanaan kod dan aliran data dalam program. Mod ini mampu mengesan masalah pada peringkat penyusunan, seperti panggilan dua kali ke fungsi free() untuk satu kawasan memori, kebocoran deskriptor fail, dereferencing dan lulus penunjuk nol, mengakses blok memori yang dibebaskan, menggunakan nilai yang tidak diinisialisasi, dsb. Penggunaan mod baharu untuk kod OpenSSL telah memungkinkan untuk dikenal pasti kerentanan berbahaya.
  • Pengoptimuman antara prosedur yang lebih baik. Pas IPA-SRA (Interprocedural Scalar Shared Replacement) telah direka bentuk semula untuk berfungsi pada masa pengikatan dan, antara lain, kini mengalih keluar yang dikira dan mengembalikan nilai yang tidak digunakan. Dalam mod pengoptimuman "-O2", pilihan "-finline-functions" didayakan, yang ditala semula untuk mengutamakan kod yang lebih padat berbanding prestasi pelaksanaan. Kerja heuristik untuk penggunaan fungsi sebaris telah dipercepatkan. Heuristik pengembangan sebaris dan pengklonan fungsi kini boleh menggunakan maklumat tentang julat nilai untuk meramalkan keberkesanan transformasi individu. Untuk C++, ketepatan penghuraian alias berasaskan jenis telah dipertingkatkan.
  • Pengoptimuman Masa Pautan Dipertingkat (LTO). Menambah boleh laku baharu lto-dump untuk menetapkan semula maklumat tentang fail objek dengan kod bait LTO. Pas LTO selari secara automatik menentukan bilangan tugasan yang dijalankan secara serentak dan, jika ia tidak dapat ditentukan, gunakan maklumat tentang bilangan teras CPU sebagai faktor selari. Menambah keupayaan untuk memampatkan kod bait LTO menggunakan algoritma zstd.
  • Mekanisme pengoptimuman berdasarkan hasil pemprofilan kod (PGO - Pengoptimuman berpandukan Profil) telah dipertingkatkan, yang menjana kod yang lebih optimum berdasarkan analisis ciri pelaksanaan kod. Penyelenggaraan profil yang lebih baik semasa penyusunan dan pengasingan kod panas/sejuk. Melalui pilihan "-nilai-fprofileΒ» kini boleh memantau sehingga 4 nilai profil, contohnya untuk panggilan tidak langsung dan memberikan maklumat profil yang lebih tepat.
  • Spesifikasi pengaturcaraan selari dilaksanakan untuk bahasa C, C++ dan Fortran OpenACC 2.6, yang mentakrifkan alatan untuk memunggah operasi pada GPU dan pemproses khusus seperti NVIDIA PTX. Pelaksanaan standard hampir selesai Buka MP 5.0 (Pemprosesan Berbilang Terbuka), yang mentakrifkan API dan kaedah menggunakan kaedah pengaturcaraan selari pada sistem berbilang teras dan hibrid (CPU+GPU/DSP) dengan memori dikongsi dan unit pengvektoran (SIMD). Ciri tambahan seperti syarat terakhir peribadi, arahan imbasan dan gelung, perintah dan penggunaan_peranti_tambah ungkapan. Untuk OpenMP dan OpenACC, sokongan telah ditambah untuk operasi pemunggahan pada GPU AMD Radeon (GCN) generasi keempat (Fiji) dan generasi kelima (VEGA 10/VEGA 20).
  • Untuk bahasa keluarga C, fungsi "akses" telah ditambahkan untuk menerangkan akses fungsi kepada objek yang diluluskan oleh rujukan atau penuding, dan untuk mengaitkan objek tersebut dengan hujah integer yang mengandungi maklumat tentang saiz objek. Untuk bekerja bersama "akses", atribut "jenis" dilaksanakan untuk mengesan capaian yang salah daripada fungsi pengguna, contohnya, apabila menulis nilai ke kawasan di luar sempadan tatasusunan. Juga ditambah ialah atribut "symver" untuk mengaitkan simbol dalam fail ELF dengan nombor versi tertentu.
  • Amaran baharu ditambah:
    • "-Wstring-compare" (didayakan dengan "-Wextra") - memberi amaran tentang kehadiran ungkapan di mana sifar dibandingkan dengan hasil panggilan fungsi strcmp dan strncmp, yang bersamaan dengan pemalar disebabkan oleh fakta bahawa panjang daripada satu argumen adalah lebih besar daripada saiz tatasusunan dalam argumen kedua.
    • "-Wzero-length-bounds" (didayakan dengan "-Warray-bounds") - memberi amaran tentang mengakses elemen tatasusunan dengan panjang sifar, yang mungkin membawa kepada menimpa data lain.
    • Amaran "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" dan "-Wstringop-overflow" telah diperluaskan untuk mengembangkan bilangan situasi di luar sempadan yang dikendalikan.
  • Melaksanakan keupayaan untuk menentukan aksara lebar secara langsung dalam pengecam menggunakan pengekodan semasa (UTF-8 secara lalai) dan bukannya tatatanda UCN (\uNNNN atau \UNNNNNNNNN). Sebagai contoh:

    statik const int Ο€ = 3;
    int get_naΓ―ve_pi() {
    pulangkan Ο€;
    }

  • Untuk bahasa C, sebahagian daripada ciri baharu yang dibangunkan dalam standard C2X telah dilaksanakan (didayakan dengan menentukan -std=c2x dan -std=gnu2x): sokongan untuk sintaks "[[]]" telah muncul untuk menentukan atribut seperti dalam C++ (contohnya, [[gnu ::const]], [[ditamatkan]], [[fallthrough]] dan [[mungkin_tidak digunakan]]. Menambah sokongan untuk sintaks "u8" untuk mentakrifkan pemalar dengan aksara UTF-8.
    Menambah makro baharu pada . Menambahkan penggantian "%OB" dan "%Ob" pada strftime.

  • Mod lalai untuk C ialah "-fno-common", yang membolehkan akses yang lebih cekap kepada pembolehubah global pada beberapa platform.
  • Untuk C++, kira-kira 16 perubahan dan inovasi telah dilaksanakan, dibangunkan dalam standard C++20. Termasuk kata kunci tambahan "consinit"
    dan sokongan untuk sambungan templat telah dilaksanakan "konsep". Konsep membolehkan anda mentakrifkan satu set keperluan parameter templat yang, pada masa penyusunan, mengehadkan set hujah yang boleh diterima sebagai parameter templat. Konsep boleh digunakan untuk mengelakkan ketidakkonsistenan logik antara sifat jenis data yang digunakan dalam templat dan sifat jenis data parameter input.

  • G++ menyediakan pengesanan tingkah laku yang tidak ditentukan yang disebabkan oleh menukar objek malar melalui constexpr. Penggunaan memori dikurangkan oleh pengkompil semasa mengira constexpr. Menambahkan amaran baharu "-Wmismatched-tags" dan "-Wredundant-tags".
  • Pilihan baris arahan baharu telah dicadangkan:
    • "-fallocation-dce" untuk mengalih keluar pasangan pengendali "baru" dan "padam" yang tidak diperlukan.
    • "-fprofile-partial-training" untuk melumpuhkan pengoptimuman saiz untuk kod yang tidak mempunyai larian latihan.
    • "-fprofile-reproducible untuk mengawal tahap kebolehulangan profil.
    • "-fprofile-prefix-path" untuk mentakrifkan direktori binaan sumber asas yang digunakan untuk penjanaan profil berasingan (untuk "-fprofile-generate=profile_dir" dan "-fprofile-use=profile_dir").
  • Dalam teks amaran untuk pilihan yang disebutkan, hiperpautan disediakan yang membolehkan anda pergi ke dokumentasi untuk pilihan ini. Penggantian URL dikawal menggunakan pilihan "-fdiagnostics-urls".
  • Menambah operator prapemproses "__mempunyai_terbina", yang boleh digunakan untuk menyemak fungsi terbina dalam.
  • Menambah fungsi terbina dalam baharu "__builtin_roundeven" dengan pelaksanaan fungsi pembulatan yang ditakrifkan dalam spesifikasi ISO/IEC TS 18661, serupa dengan "bulat", tetapi bahagian pembundaran lebih besar daripada 0.5 ke atas (kepada nilai yang lebih besar), kurang daripada 0.5 - turun (kepada sifar), dan sama dengan 0.5 - bermula dari pariti digit kedua terakhir.
  • Untuk seni bina AArch64, sokongan untuk sambungan SVE2 telah ditambah dan sokongan untuk SVE (Scalable Vector Extension) telah dipertingkatkan, termasuk sokongan tambahan untuk fungsi dan jenis SVE ACLE terbina dalam, dan penggunaan vektorisasi. Sokongan untuk LSE (Large System Extensions) dan TME (Transactional Memory Extension) telah diperluaskan. Menambahkan arahan baharu yang dicadangkan dalam Armv8.5-A dan Armv8.6-A, termasuk arahan untuk penjanaan nombor rawak, pembundaran, pengikatan tag memori,
    bfloat16 dan pendaraban matriks. Menambah sokongan pemproses
    Korteks Lengan-A77,
    Korteks Lengan-A76AE,
    Korteks Lengan-A65,
    Korteks Lengan-A65AE,
    Korteks Lengan-A34 dan
    Marvell ThunderX3.

  • Menambah sokongan untuk ABI FDPIC (penunjuk fungsi 32-bit) untuk ARM64. Reka bentuk semula dan pemprosesan dioptimumkan bagi operasi integer 64-bit. Menambah sokongan CPU
    Korteks Lengan-A77,
    Korteks Lengan-A76AE dan
    Korteks Lengan-M35P. Sokongan yang diperluaskan untuk arahan pemprosesan data ACLE, termasuk SIMD 32-bit, pendaraban 16-bit, aritmetik selak dan pengoptimuman algoritma DSP yang lain. Menambahkan sokongan percubaan untuk arahan ACLE CDE (Sambungan Laluan Data Tersuai).

  • Penjanaan kod dan pemvektoran yang dipertingkatkan dengan ketara dalam bahagian belakang untuk GPU AMD berdasarkan seni bina mikro GCN.
  • Menambah sokongan untuk peranti seperti XMEGA untuk seni bina AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208 3209, ATmega4808 dan ATmega4809.

  • Sambungan seni bina set arahan Intel ENQCMD baharu (-menqcmd) telah ditambah untuk seni bina IA-32/x86-64. Sokongan tambahan untuk Intel Cooperlake (-march=cooperlake, termasuk sambungan AVX512BF16 ISA) dan Tigerlake (-march=tigerlake, termasuk sambungan MOVDIRI, MOVDIR64B dan AVX512VP2INTERSECT ISA) CPU.
  • Pelaksanaan HSAIL (Bahasa Perantaraan Seni Bina Sistem Heterogen) untuk sistem pengkomputeran heterogen berdasarkan seni bina HSA telah ditamatkan dan berkemungkinan akan dialih keluar dalam keluaran akan datang.

Sumber: opennet.ru

Tambah komen