Rilis saka GCC 10 compiler suite

Sawise setahun pembangunan diterbitake release saka pesawat free compiler GCC 10.1, Rilis utama pisanan ing cabang GCC 10.x anyar. Sesuai karo skema anyar nomer release, versi 10.0 digunakake sak proses pembangunan, lan sakcepete sadurunge release saka GCC 10.1, cabang GCC 11.0 wis branched mati, ing basis kang release pinunjul sabanjuré, GCC 11.1, bakal kawangun.

GCC 10.1 misuwur amarga implementasine akeh inovasi ing basa C ++ sing dikembangake kanggo standar C ++ 20, perbaikan sing ana gandhengane karo standar basa C ing mangsa ngarep (C2x), optimasi anyar ing backend compiler lan dhukungan eksperimen. mode analisis statis. Kajaba iku, sajrone nyiapake cabang anyar, proyek kasebut mindhah repositori saka SVN menyang Git.

Utama ganti:

  • Ditambahake mode eksperimental analisis statis"- fanalyzer", sing nindakake analisis interprocedural intensif sumber daya saka jalur eksekusi kode lan aliran data ing program. Mode bisa ndeteksi masalah ing tataran kompilasi, kayata telpon pindho menyang free () fungsi kanggo siji area memori, file deskriptor bocor, dereferencing lan maringaken null penunjuk, ngakses pamblokiran memori dibebaske, nggunakake nilai uninitialized, etc. Panggunaan mode anyar kanggo kode OpenSSL wis bisa kanggo ngenali kerentanan mbebayani.
  • Optimizations interprocedural apik. Pass IPA-SRA (Interprocedural Scalar Shared Replacement) wis didesain ulang supaya bisa digunakake ing wektu ikatan lan, ing antarane liyane, saiki ngilangi nilai sing wis diwilang lan ngasilake nilai sing ora digunakake. Ing mode optimasi "-O2", opsi "-finline-functions" diaktifake, sing disetel maneh kanggo milih kode sing luwih kompak tinimbang kinerja eksekusi. Karya heuristik kanggo panyebaran fungsi inline wis digawe cepet. Heuristik ekspansi inline lan fungsi kloning saiki bisa nggunakake informasi babagan kisaran nilai kanggo prédhiksi efektifitas transformasi individu. Kanggo C ++, akurasi parsing alias basis jinis wis apik.
  • Enhanced Linking Time Optimizations (LTO). Ditambahake eksekusi anyar lto-mbucal kanggo ngreset informasi bab file obyek karo bytecode LTO. Parallel LTO pass otomatis nemtokake jumlah bebarengan mlaku nggawe tugas lan, yen padha ora bisa ditemtokake, nggunakake informasi bab nomer intine CPU minangka faktor parallelization. Nambahake kemampuan kanggo compress bytecode LTO nggunakake algoritma zstd.
  • Mekanisme optimasi adhedhasar asil saka profil kode (PGO - Optimization dipandu Profil) wis apik, kang ngasilake kode sing luwih optimal adhedhasar analisis karakteristik saka eksekusi kode. Ngapikake pangopènan profil sajrone kompilasi lan pamisahan kode panas / kadhemen. Liwat opsi "-fprofile-nilai»saiki bisa ngawasi nganti 4 nilai profil, contone kanggo telpon ora langsung lan menehi informasi profil sing luwih tepat.
  • Spesifikasi pemrograman paralel ditrapake kanggo basa C, C ++ lan Fortran OpenACC 2.6, sing nemtokake alat kanggo mbukak operasi ing GPU lan prosesor khusus kayata NVIDIA PTX. Implementasi standar wis meh rampung Bukak MP 5.0 (Mbukak Multi-Processing), kang nemtokake API lan cara aplikasi cara program podo ing multi-inti lan hibrida (CPU + GPU / DSP) sistem karo memori sambungan lan unit vectorization (SIMD). Fitur sing ditambahake kayata syarat pribadi pungkasan, arahan pindai lan daur ulang, ekspresi pesenan lan gunakake_device_addr. Kanggo OpenMP lan OpenACC, dhukungan wis ditambahake kanggo operasi offloading ing generasi kaping papat (Fiji) lan GPU AMD Radeon (GCN) generasi kaping lima (VEGA 10/VEGA 20).
  • Kanggo basa kulawarga C, fungsi "akses" wis ditambahake kanggo njlèntrèhaké akses fungsi menyang obyek liwat referensi utawa pointer, lan kanggo nggandhengake obyek kasebut karo argumen integer sing ngemot informasi babagan ukuran obyek. Kanggo nggarap "akses", atribut "jinis" dileksanakake kanggo ndeteksi akses sing salah saka fungsi pangguna, contone, nalika nulis nilai menyang area ing njaba wates array. Uga ditambahake yaiku atribut "symver" kanggo nggandhengake simbol ing file ELF kanthi nomer versi tartamtu.
  • Bebaya anyar ditambahake:
    • "-Wstring-compare" (diaktifake karo "-Wextra") - ngelingake babagan anané ekspresi sing nol dibandhingake karo asil nelpon fungsi strcmp lan strncmp, sing padha karo konstanta amarga kasunyatan sing dawa. saka siji argumen luwih gedhe tinimbang ukuran array ing argumen kapindho.
    • "-Wzero-length-bounds" (diaktifake karo "-Warray-bounds") - ngelingake babagan ngakses unsur array kanthi dawa nol, sing bisa nyebabake nimpa data liyane.
    • Bebaya "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" lan "-Wstringop-overflow" wis ditambahi kanggo nggedhekake jumlah kahanan sing metu saka wates. sing ditangani.
  • Dileksanakake kemampuan kanggo langsung nemtokake karakter sudhut ing pengenal nggunakake enkoding saiki (UTF-8 minangka standar) tinimbang UCN notasi (\uNNNN utawa \UNNNNNNNNN). Tuladhane:

    statis const int π = 3;
    int get_naïve_pi() {
    bali π;
    }

  • Kanggo basa C, bagean saka fitur anyar sing dikembangake ing standar C2X wis dileksanakake (diaktifake kanthi nemtokake -std=c2x lan -std=gnu2x): dhukungan kanggo sintaks "[[]]" wis muncul kanggo nemtokake atribut kaya ing C ++ (contone, [[gnu :: const]], [[deprecated]], [[fallthrough]] lan [[maybe_unused]]. Added support kanggo sintaksis "u8" kanggo nemtokake konstanta karo UTF-8 karakter.
    Ditambahake macro anyar kanggo . Ditambahake "% OB" lan "% Ob" substitusi kanggo strftime.

  • Mode standar kanggo C yaiku "-fno-common", sing ngidini akses sing luwih efisien menyang variabel global ing sawetara platform.
  • Kanggo C ++, udakara 16 owah-owahan lan inovasi wis dileksanakake, dikembangake ing standar C ++ 20. Kalebu tembung kunci sing ditambahake "consinit"
    lan dhukungan kanggo ekstensi template wis dileksanakake "konsep". Konsep ngidini sampeyan nemtokake set syarat parameter cithakan sing, ing wektu kompilasi, mbatesi set argumen sing bisa ditampa minangka parameter cithakan. Konsep kasebut bisa digunakake kanggo ngindhari inconsistencies logis antarane sifat jinis data sing digunakake ing cithakan lan sifat jinis data saka parameter input.

  • G ++ menehi deteksi prilaku undefined disebabake owah-owahan obyek pancet liwat constexpr. Suda konsumsi memori dening compiler nalika ngitung constexpr. Nambahake bebaya anyar "-Wmismatched-tags" lan "-Wredundant-tags".
  • Opsi baris perintah anyar wis diusulake:
    • "-fallocation-dce" kanggo mbusak pasangan rasah saka operator "anyar" lan "mbusak".
    • "-fprofile-partial-training" kanggo mateni optimasi ukuran kanggo kode sing ora duwe latihan roto.
    • "-fprofile-reproducible kanggo ngontrol tingkat reproducibility profil.
    • "-fprofile-prefix-path" kanggo nemtokake direktori mbangun sumber dhasar sing digunakake kanggo generasi profil sing kapisah (kanggo "-fprofile-generate = profile_dir" lan "-fprofile-use = profile_dir").
  • Ing teks bebaya kanggo opsi kasebut, hyperlinks diwenehake sing ngidini sampeyan pindhah menyang dokumentasi kanggo opsi kasebut. Substitusi URL dikontrol nggunakake opsi "-fdiagnostics-urls".
  • Ditambahake operator preprocessor "__wis_dibangun", sing bisa digunakake kanggo mriksa fungsi sing dibangun.
  • Nambahake fungsi dibangun ing anyar "__builtin_roundeven" karo implementasine saka fungsi dibunderaké ditetepake ing ISO / IEC TS 18661 specification, padha karo "babak", nanging bagean dibunderaké luwih saka 0.5 munggah (kanggo Nilai luwih gedhe), kurang saka 0.5 - mudhun (nganti nul), lan padha karo 0.5 - wiwit saka paritas digit penultimate.
  • Kanggo arsitektur AArch64, dhukungan kanggo extension SVE2 ditambahake lan dhukungan kanggo SVE (Scalable Vector Extension) wis apik, kalebu dhukungan tambahan kanggo fungsi lan jinis SVE ACLE sing dibangun, lan panggunaan vektorisasi. Dhukungan kanggo LSE (Ekstensi Sistem Gedhe) lan TME (Ekstensi Memori Transaksional) wis ditambahi. Added instruksi anyar ngajokaken ing Armv8.5-A lan Armv8.6-A, kalebu instruksi kanggo generasi nomer acak, dibunderaké, tag memori naleni,
    bfloat16 lan perkalian matriks. Dhukungan prosesor ditambahake
    Korteks Lengan-A77,
    Korteks Lengan-A76AE,
    Korteks Lengan-A65,
    Korteks Lengan-A65AE,
    Arm Cortex-A34 lan
    Marvell ThunderX3.

  • Dhukungan tambahan kanggo ABI FDPIC (panunjuk fungsi 32-bit) kanggo ARM64. Ngrancang lan ngoptimalake pangolahan operasi integer 64-bit. Dhukungan CPU ditambahake
    Korteks Lengan-A77,
    Arm Cortex-A76AE lan
    Arm Cortex-M35P. Dhukungan sing ditambahi kanggo instruksi pangolahan data ACLE, kalebu SIMD 32-bit, perkalian 16-bit, aritmetika latch, lan optimasi algoritma DSP liyane. Dhukungan eksperimen ditambahake kanggo instruksi ACLE CDE (Custom Datapath Extension).

  • Ngartekno apik generasi kode lan vectorization ing backend kanggo AMD GPU adhedhasar microarchitecture GCN.
  • Dhukungan tambahan kanggo piranti kaya XMEGA kanggo arsitektur AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209 4808, ATmega4809 lan ATmegaXNUMX.

  • Ekstensi arsitektur set instruksi Intel ENQCMD anyar (-menqcmd) wis ditambahake kanggo arsitektur IA-32 / x86-64. Dhukungan tambahan kanggo Intel Cooperlake (-march = cooperlake, kalebu extension AVX512BF16 ISA) lan Tigerlake (-march = tigerlake, kalebu MOVDIRI, MOVDIR64B lan AVX512VP2INTERSECT ISA ekstensi) CPU.
  • Implementasine HSAIL (Heterogenous System Architecture Intermediate Language) kanggo sistem komputasi heterogen adhedhasar arsitektur HSA wis ora digunakake lan bakal dicopot ing rilis sing bakal teka.

Source: opennet.ru

Add a comment