Ngaleupaskeun GCC 10 kompiler suite

Sanggeus sataun pangwangunan diterbitkeun ngabebaskeun set bébas tina compiler GCC 10.1, release utama munggaran dina cabang GCC 10.x anyar. Dumasarkeun kana skéma anyar angka release, versi 10.0 dipaké dina prosés ngembangkeun, sarta teu lila saméméh sékrési GCC 10.1, cabang GCC 11.0 geus cabang kaluar, dina dasar nu release signifikan salajengna, GCC 11.1, bakal kabentuk.

GCC 10.1 kasohor pikeun palaksanaan seueur inovasi dina basa C ++ dikembangkeun pikeun standar C ++ 20, perbaikan anu aya hubunganana sareng standar basa C anu bakal datang (C2x), optimasi énggal dina backends kompiler sareng dukungan ékspérimén. modeu analisis statik. Salaku tambahan, nalika nyiapkeun cabang énggal, proyék éta mindahkeun gudang ti SVN ka Git.

utama parobahan:

  • Ditambahkeun mode ékspérimén analisis statik "-fanalyzer", nu ngalakukeun analisis interprocedural sumberdaya-intensif jalur palaksanaan kode jeung ngalir data dina program. Modeu sanggup ngadeteksi masalah dina tahap kompilasi, sapertos nelepon ganda ka bebas () fungsi pikeun hiji wewengkon memori, file descriptor bocor, dereferencing tur lulus null pointers, aksés blok memori dibébaskeun, ngagunakeun nilai uninitialized, jsb. Pamakéan mode anyar pikeun kode OpenSSL parantos ngamungkinkeun pikeun ngaidentipikasi kerentanan bahaya.
  • Ningkatkeun optimasi interprocedural. Pas IPA-SRA (Interprocedural Scalar Shared Replacement) parantos didesain deui pikeun dianggo dina waktos ngariung sareng, antara anu sanésna, ayeuna ngaleungitkeun nilai-nilai anu diitung sareng dipulangkeun. Dina modeu optimasi "-O2", pilihan "-finline-functions" diaktipkeun, anu disetel deui pikeun milih kode anu langkung kompak tibatan kinerja palaksanaan. Karya heuristik pikeun panyebaran fungsi inline parantos gancangan. Heuristik ékspansi inline sareng fungsi kloning ayeuna tiasa nganggo inpormasi ngeunaan rentang nilai pikeun ngaduga efektivitas transformasi individu. Pikeun C ++, katepatan tina tipe basis alias parsing geus ningkat.
  • Enhanced Linking Time Optimizations (LTO). Ditambahkeun laksana anyar Lto-dump pikeun ngareset informasi ngeunaan file obyék kalawan bytecode LTO. Paralel LTO pas otomatis nangtukeun jumlah sakaligus ngajalankeun tugas make na, lamun maranéhna teu bisa ditangtukeun, ngagunakeun informasi ngeunaan Jumlah cores CPU salaku faktor parallelization. Ditambahkeun kamampuhan pikeun niiskeun bytecode LTO ngagunakeun algoritma zstd.
  • Mékanisme optimasi dumasar kana hasil profil kode (PGO - optimasi dipandu Profil) parantos ningkat, anu ngahasilkeun kode anu langkung optimal dumasar kana analisa karakteristik palaksanaan kode. Ningkatkeun pangropéa profil nalika kompilasi sareng pamisahan kode panas / tiis. Ngaliwatan pilihan "-fprofile-nilai»ayeuna tiasa ngawas dugi ka 4 nilai profil, contona pikeun telepon teu langsung sareng nyayogikeun inpormasi profil anu langkung tepat.
  • spésifikasi programming paralel dilaksanakeun pikeun C, C ++ jeung basa Fortran OpenACC 2.6, nu nangtukeun parabot pikeun operasi offloading on GPUs jeung prosesor husus kayaning NVIDIA PTX. Palaksanaan standar ampir réngsé Buka MP 5.0 (Buka Multi-Processing), nu ngahartikeun API jeung métode nerapkeun métode programming paralel dina multi-core jeung hibrid (CPU + GPU / DSP) sistem kalawan memori dibagikeun jeung unit vectorization (SIMD). Fitur tambahan sapertos kaayaan pribadi terakhir, petunjuk scan sareng loop, pesenan sareng éksprési use_device_addr. Pikeun OpenMP sareng OpenACC, dukungan parantos ditambihan pikeun ngamuat operasi dina generasi kaopat (Fiji) sareng GPU AMD Radeon (GCN) generasi kalima (VEGA 10/VEGA 20).
  • Pikeun basa kulawarga C, fungsi "aksés" geus ditambahkeun pikeun ngajelaskeun aksés fungsi kana objék diliwatan ku rujukan atawa pointer, sarta pikeun ngahubungkeun objék misalna kalawan argumen integer ngandung émbaran ngeunaan ukuran objék. Pikeun damel bareng sareng "aksés", atribut "tipe" dilaksanakeun pikeun ngadeteksi aksés anu salah tina fungsi pangguna, contona, nalika nyerat nilai ka daérah di luar wates susunan. Ogé ditambahkeun nyaéta atribut "symver" pikeun ngahubungkeun simbol dina file ELF kalawan nomer versi husus.
  • Peringatan anyar ditambahkeun:
    • "-Wstring-compare" (diaktipkeun sareng "-Wextra") - ngingetkeun ngeunaan ayana éksprési anu nol dibandingkeun sareng hasil tina nelepon fungsi strcmp sareng strncmp, anu sami sareng konstanta kusabab kanyataan panjangna. tina hiji argumen leuwih badag batan ukuran Asép Sunandar Sunarya dina argumen kadua.
    • "-Wzero-length-bounds" (diaktipkeun ku "-Warray-bounds") - ngingetkeun ngeunaan ngakses elemen Asép Sunandar Sunarya enol panjang, nu bisa ngakibatkeun overwriting data séjén.
    • The "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" jeung "-Wstringop-overflow" warnings geus dimekarkeun pikeun dilegakeun jumlah kaluar-of-bounds kaayaan. anu diurus.
  • Dilaksanakeun kamampuhan pikeun langsung nangtukeun karakter lega dina identifiers ngagunakeun encoding ayeuna (UTF-8 sacara standar) tinimbang notasi UCN (\uNNNN atawa \UNNNNNNNNN). Salaku conto:

    const statik int π = 3;
    int get_naïve_pi() {
    mulang π;
    }

  • Pikeun basa C, sabagian fitur anyar anu dikembangkeun dina standar C2X parantos dilaksanakeun (diaktipkeun ku netepkeun -std=c2x sareng -std=gnu2x): dukungan pikeun sintaksis "[[]]" parantos muncul pikeun netepkeun atribut sapertos dina. C ++ (contona, [[gnu :: const]], [[deprecated]], [[fallthrough]] jeung [[meureun_unused]]. Ditambahkeun rojongan pikeun "u8" sintaksis pikeun nangtukeun konstanta kalawan UTF-8 karakter.
    Ditambahkeun makro anyar pikeun . Ditambahkeun "% OB" sareng "% Ob" substitusi kana strftime.

  • Sacara standar, C nganggo mode "-fno-common", anu ngamungkinkeun aksés anu langkung éfisién kana variabel global dina sababaraha platform.
  • Pikeun C ++, ngeunaan 16 parobahan sarta inovasi geus dilaksanakeun, dimekarkeun dina standar C ++ 20. Kaasup kecap konci tambahan "consinit"
    sareng dukungan pikeun ekstensi template parantos dilaksanakeun "konsép". Konsep ngidinan Anjeun pikeun nangtukeun sakumpulan syarat parameter template nu, dina waktos compile, ngawatesan susunan argumen nu bisa ditarima salaku parameter template. Konsep bisa dipaké pikeun nyingkahan inconsistencies logis antara sipat tipe data dipaké dina citakan jeung tipe data sipat parameter input.

  • G ++ nyadiakeun deteksi kabiasaan undefined disababkeun ku ngarobah objék konstan ngaliwatan constexpr. Ngurangan konsumsi memori ku compiler nalika ngitung constexpr. Ditambahkeun peringatan anyar "-Wmismatched-tags" sareng "-Wredundant-tags".
  • Pilihan baris paréntah anyar parantos diajukeun:
    • "-fallocation-dce" pikeun miceun pasangan teu perlu operator "anyar" jeung "ngahapus".
    • "-fprofile-partial-training" pikeun nganonaktipkeun optimasi ukuran pikeun kode nu teu boga latihan ngajalankeun.
    • "-fprofile-reproducible pikeun ngadalikeun tingkat reproducibility profil.
    • "-fprofile-prefix-path" pikeun ngartikeun diréktori ngawangun sumber dasar anu dianggo pikeun generasi profil anu misah (pikeun "-fprofile-generate = profile_dir" sareng "-fprofile-use = profile_dir").
  • Dina téks peringatan pikeun pilihan anu disebatkeun, hyperlink disayogikeun anu ngamungkinkeun anjeun pikeun muka dokuméntasi pikeun pilihan ieu. Substitusi URL dikontrol nganggo pilihan "-fdiagnostics-urls".
  • Ditambahkeun operator preprocessor "__geus_diwangun", anu tiasa dianggo pikeun mariksa fungsi anu diwangun.
  • Ditambahkeun fungsi diwangun-di anyar "__builtin_roundeven" kalawan palaksanaan fungsi rounding didefinisikeun dina ISO / IEC TS 18661 spésifikasi, sarupa jeung "buleud", tapi rounding bagian leuwih gede ti 0.5 nepi (nepi ka nilai nu leuwih gede), kirang ti 0.5. - handap (ka enol), sarta sarua jeung 0.5 - mimitian ti parity tina angka penultimate.
  • Pikeun arsitéktur AArch64, rojongan pikeun extension SVE2 geus ditambahkeun jeung rojongan pikeun SVE (Scalable Vector Extension) geus ningkat, kaasup rojongan ditambahkeun pikeun diwangun-di SVE ACLE fungsi sarta jenis, sarta pamakéan vectorization. Rojongan pikeun LSE (System Extensions badag) jeung TME (Transactional Memory Extension) geus dimekarkeun. Ditambahkeun parentah anyar diajukeun dina Armv8.5-A na Armv8.6-A, kaasup parentah pikeun generasi angka acak, rounding, tag memori mengikat,
    bfloat16 sarta multiplication matrix. Ditambahkeun rojongan processor
    Panangan Cortex-A77,
    Panangan Cortex-A76AE,
    Panangan Cortex-A65,
    Panangan Cortex-A65AE,
    Panangan Cortex-A34 jeung
    Marvell ThunderX3.

  • Ditambahkeun rojongan pikeun ABI FDPIC (32-bit pointers fungsi) pikeun ARM64. Didesain ulang sareng dioptimalkeun ngolah operasi integer 64-bit. Ditambahkeun rojongan CPU
    Panangan Cortex-A77,
    Panangan Cortex-A76AE jeung
    Panangan Cortex-M35P. Pangrojong anu diperluas pikeun paréntah ngolah data ACLE, kalebet SIMD 32-bit, multiplikasi 16-bit, aritmetika kait, sareng optimasi algoritma DSP anu sanés. Ditambahkeun rojongan eksperimen pikeun ACLE CDE (Custom Datapath Extension) parentah.

  • Nyata ningkat generasi kode jeung vectorization dina backend pikeun AMD GPUs dumasar kana microarchitecture GCN.
  • Ditambahkeun dukungan pikeun alat-alat sapertos XMEGA pikeun arsitéktur AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208 3209, ATmega4808 sareng ATmega4809.

  • A anyar Intel ENQCMD instruksi set arsitéktur extension (-menqcmd) geus ditambahkeun pikeun IA-32 / x86-64 arsitéktur. Ditambahkeun rojongan pikeun Intel Cooperlake (-march = cooperlake, ngawengku AVX512BF16 Isa extension) sarta Tigerlake (-march = tigerlake, ngawengku MOVDIRI, MOVDIR64B na AVX512VP2INTERSECT Isa ekstensi) CPUs.
  • Palaksanaan HSAIL (Basa Panengah Arsitéktur Sistem Hétérogén) pikeun sistem komputasi hétérogén dumasar kana arsitéktur HSA parantos dicabut sareng kamungkinan bakal dihapus dina rilis anu bakal datang.

sumber: opennet.ru

Tambahkeun komentar