Ngaleupaskeun GCC 15 kompiler suite

Saatos sataun pangwangunan, GCC compiler suite GCC 15.1 gratis parantos dileupaskeun, pelepasan utama munggaran dina cabang GCC 15.x énggal. Numutkeun skéma pelepasan panomeran, vérsi 15.0 dianggo nalika pangwangunan, sareng teu lami sateuacan sékrési GCC 15.1, cabang GCC 16.0 parantos dicabang, anu bakal janten dasar pelepasan utama salajengna, GCC 16.1.

Parobahan utama:

  • Nalika nyusun program C, standar C23 (Ringkesan Robah) sareng ekstensi GNU ("-std=gnu23") dianggo sacara standar. Saméméhna, standar C17 dipaké sacara standar (-std=gnu17). Parobihan éta tiasa nyababkeun masalah nalika ngawangun proyék-proyék anu tos aya kusabab asupan konstanta nullptr, jinis _BitInt(n), sareng kecap konci bool, leres, sareng palsu, anu tiasa bertentangan sareng identifier anu sami anu didefinisikeun dina aplikasi.
  • Kamampuhan standar C23 ieu parantos dilaksanakeun:
    • The "#embed" diréktif dirancang pikeun embedding sumberdaya binér kana kode.
    • Atribut "unsequenced", anu nunjukkeun yén hasilna henteu gumantung kana urutan palaksanaan.
    • Atribut "reproducible" nunjukkeun yén fungsina salawasna mulihkeun hasil anu sami sareng input anu sami, nyaéta henteu gumantung kana faktor sanés.
  • Unsur-unsur standar C2Y anu bakal datang parantos dilaksanakeun (-std = c2y sareng -std = gnu2y):
    • Kamampuhan pikeun nyatakeun variabel dina pernyataan "lamun", sapertos "lamun (int x = meunang ()) {...}".
    • Rojongan pikeun ngaran loop pikeun ngarujuk kana kode. luar: keur (int i = 0; i <IK; ++ i) {switch (i) {bisi 1: megatkeun; // jumps ka CONT1 bisi 2: megatkeun luar; // jumps ka CONT2 } // CONT1 } // CONT2
    • Rojongan pikeun nangtukeun rentang nilai integer dina éksprési kasus, sapertos "kasus 1...10:".
    • Sufiks "i" sareng "j" pikeun nunjukkeun bagian imajiner dina wilangan kompleks.
    • Kamungkinan ngagunakeun operator "++" sareng "-" kalayan nomer kompleks.
    • Konstruksi "_Generic(type, expr1, expr2, ...)" pikeun milih éksprési dumasar kana jinis operan.
    • Rojongan pikeun ngakses arrays byte kawas tipe objék séjén, kayaning struktur jeung union.
    • Rojongan pikeun nerapkeun operator "alignof" kana susunan anu teu lengkep (anu dinyatakeun tanpa nangtukeun ukuran, sapertos "int a []").
    • Nambahkeun sintaksis anyar pikeun oktal, héksadesimal, sareng urutan ngewa karakter universal. Gantina "\u", "\x" jeung "\nnn", runtuyan "\u{}", "\o{}" jeung "\x{}" diusulkeun, nu mana wae jumlah digit bisa dieusian.
    • Diwangun-di fungsi "__builtin_stdc_rotate_left" jeung "__builtin_stdc_rotate_right".
    • Operasi panjang nol dina pointer NULL diidinan (contona "sizeof (* p)").
  • Frontend pikeun basa C ++ ngalaksanakeun fitur anu dikembangkeun pikeun standar C ++ 26 kahareup:
    • Operator variasi "babaturan" ("babaturan Ts...").
    • Kamampuhan ngagunakeun kecap konci constexpr kalayan variasi operator anyar (panempatan anyar) pikeun nempatkeun hiji obyék kana mémori anu tos dialokasikeun dina waktos kompilasi.
    • Kaluaran kasalahan nalika mupus pointer kana jinis anu teu lengkep.
    • Sintaksis pikeun nangtukeun parameter variadic kalawan ellipsis tanpa koma saméméhna (contona, lamun nangtukeun "void e(int...)" tinimbang "void e(int, ...)") geus deprecated.
    • Indexing pakét parameter dina citakan.
    • Atribut pikeun bindings terstruktur;
    • Syntax '= delete("alesan")';
    • Kaasup "@", "$" jeung "`" dina set karakter dasar.
    • Pamakéan makro pikeun nyatakeun modul dilarang.
    • Kamampuhan ngagunakeun beungkeutan terstruktur salaku kaayaan dina lamun jeung switch pernyataan.
    • Rojongan pikeun ngabandingkeun Asép Sunandar Sunarya langsung (misalna "int arr1 [5]; int arr2 [5]; bool sarua = arr1 == arr2") geus dieureunkeun.
    • Mékanisme "#embed" pikeun nampilkeun sumber binér.
    • Kelas template is_trivial parantos dileungitkeun.
  • Ditambahkeun fitur C++ 23:
    • Disallow sababaraha pamakéan diréktif "ékspor" sarta ngidinan pamakéan "ékspor {}".
    • Rojongan pikeun manjangkeun umur obyék samentawis pikeun puteran anu diulang dina rentang.
  • Perpustakaan libstdc ++ ngalaksanakeun dukungan ékspérimén pikeun modul std sareng std.compat.
  • Ngagunakeun "{0}" initializer pikeun union dina kode C jeung C ++ euweuh jaminan yén sakabéh eusi diberesihan, tapi malah ngakibatkeun unsur mimiti union nu zeroed kaluar. Pikeun mupus sakabéh union, make "{}" éksprési ditetepkeun dina spésifikasi C23, atawa nangtukeun pilihan "-fzero-init-padding-bits=union" pikeun mulangkeun kabiasaan heubeul.
  • Dilaksanakeun dukungan pikeun atribut "musttail" ([[gnu:: musttail]] sareng [[clang:: musttail]]) pikeun telepon buntut anu dijamin. atribut nu manglaku ka pernyataan balik nu nelepon recursive kana fungsi ayeuna, sarta ensures yén panggero sapertos bakal ngagunakeun recursion buntut, nu teu allocate memori tambahan dina tumpukan éta (ngaleungitkeun résiko tina ngajalankeun kaluar memori kalayan jumlah anu kacida gedéna di panggero).
  • Dilaksanakeun rojongan pikeun atribut flag_enum ([[gnu:: flag_enum]] jeung [[clang:: flag_enum]]) dilarapkeun ka enumerations pikeun nunjukkeun yén eusi dipaké dina operasi bitwise (nyegah warnings dina modeu -Wswitch).
  • Ditambahkeun rojongan pikeun atribut "counted_by", nu bisa dipaké pikeun nangtukeun widang dina struktur jeung Asép Sunandar Sunarya fléksibel nu nangtukeun jumlah elemen. atribut nu bisa dipaké pikeun ngaronjatkeun efisiensi panyangga cek overflow.
  • Ditambahkeun "nonnull_if_nonzero" atribut kana fungsi, nu nangtukeun yén sababaraha parameter fungsi kalawan pointers tiasa NULL ngan lamun parameter sejen nyaeta nol.
  • Ngalegaan assembler inlining "asm (...)" fungsi luar diwenangkeun. Dina sisipan assembler, diwenangkeun nimpa memori dina zona beureum tumpukan (wewengkon di luhureun tumpukan).
  • Kompilasi kode C ++ langkung gancang berkat hashing template anu ningkat.
  • Ditambahkeun optimizations anyar. Rojongan geus dilaksanakeun pikeun puteran vectorizing nu ngandung kode pikeun kaluar mimiti (Contona, via putus atawa balik panggero), sanajan loop sapertos ngamanipulasi arrays dialokasikeun dinamis atawa buffers anu ukuranana teu dipikanyaho dina waktos compile. Nalika pilihan -O2 dieusian, vectorization tina sababaraha loop gampang vectorizable nu informasi tripcount teu sadia diaktipkeun.
  • Ditambahkeun mode optimasi Incremental dina tahap linking (LTO, Link-Time Optimasi), nu nyata ngurangan waktu recompilation nalika maké LTO dina situasi dimana parobahan minor geus dijieun kode (hiji fungsi geus diédit). Pikeun ngaktipkeun mode incremental, pilihan "-flto-incremental" diajukeun.
  • Ningkatkeun kompilasi file input anu ageung pisan. Dilaksanakeun tracking angka kolom leuwih gede ti 4096. Ningkatkeun akurasi nunjukkeun lokasi kasalahan sarta warnings dina file anu kacida gedéna.
  • Ningkatkeun pisibilitas laporan nalika ngadiagnosa masalah. Salaku conto, lokasi masalah disorot ku simbol "⚠️", perenah kaluaran pikeun kasalahan dina témplat C ++ parantos dirobih, petunjuk parantos ditambah pikeun mempermudah transisi ka standar C23, sareng skéma warna parantos didesain ulang. Ditambahkeun kamampuan pikeun ngaluarkeun diagnostik dina format Sarif (-fdiagnostics-format=sarif-file).
  • Perpustakaan libgdiagnostics parantos dilaksanakeun, ngamungkinkeun anjeun ngahijikeun kamampuan GCC anu aya hubunganana sareng desain pesen diagnostik kana proyék anjeun (contona, anjeun tiasa nganggo kutipan, panyorot, sareng petunjuk koreksi).
  • Ditambahkeun peringatan "-Wtrailing-whitespace" sareng "-Wleading-whitespace" pikeun ngadeteksi spasi bodas sésa di tungtung garis sareng spasi bodas tambahan di awal garis.
  • Ditambahkeun peringatan "-Wheader-guard" pikeun ngalaporkeun masalah dina makro hansip header anu nyegah file header kalebet deui.
  • Frontend pikeun basa D geus diropéa kana versi 2.111.0.
  • Rojongan pikeun integer unsigned geus ditambahkeun kana frontend Fortran.
  • iket ngawengku hiji compiler pikeun basa COBOL, gcobol, nu ngarojong x86-64 na AArch64 platform na teu dirancang pikeun pamakéan dina sistem 32-bit. Kompiler ngalaksanakeun spésifikasi ISO / IEC 1989: 2023 sareng lulus kalolobaan tés NIST CCVS / 85.
  • Palaksanaan OpenMP 5.0, 5.1, 5.2 jeung 6.0 (Open Multi-Processing) standar, nangtukeun API jeung métode pikeun nerapkeun métode programming paralel dina multi-core jeung hibrid (CPU + GPU / DSP) sistem kalawan memori dibagikeun jeung unit vectorization (SIMD), geus dituluykeun. Ditambahkeun dukungan pikeun metadirectives sareng ubin, unroll, interop sareng constructs dispatch. Kanggo sababaraha GPU AMD sareng NVIDIA, dukungan pikeun mémori anu dihijikeun parantos ditambah (diaktipkeun ku netepkeun unified_shared_memory dina diréktif "merlukeun"). Ditambahkeun dukungan pikeun ekspresi "self_maps".
  • Backend pikeun arsitéktur AArch64 parantos diropéa pikeun ngadukung platform MinGW (aarch64-w64-mingw32). Langkung ti 20 ekstensi ARM8 parantos dilaksanakeun sareng dukungan pikeun ekstensi ACLE (Arm C Language Extensions) parantos ningkat. Seueur perbaikan parantos dilakukeun pikeun generator kode. Ditambahkeun dukungan CPU:
    • Apple A12 (apal-a12)
    • Apple M1 (apal-m1)
    • Apple M2 (apal-m2)
    • Apple M3 (apal-m3)
    • Panangan Cortex-A520AE (cortex-a520ae)
    • Panangan Cortex-A720AE (cortex-a720ae)
    • Panangan Cortex-A725 (cortex-a725)
    • Panangan Cortex-R82AE (cortex-r82ae)
    • Panangan Cortex-X925 (cortex-x925)
    • Arm Neoverse N3 (neoverse-n3)
    • Arm Neoverse V3 (neoverse-v3)
    • Arm Neoverse V3AE (neoverse-v3ae)
    • FUJITSU-MONAKA (fujitsu-monaka)
    • NVIDIA Grace
    • NVIDIA Olympus (olympus)
    • Qualcomm Oryon-1 (Oryon-1)
  • Backend generasi kode AMD Radeon GPU (GCN) parantos diropéa pikeun ngadukung perpustakaan libstdc ++ sareng dukungan generasi kode ékspérimén parantos ditambah pikeun séri alat gfx9-generik, gfx10-3-generik, sareng gfx11-generik.
  • Backend x86 ayeuna ngadukung ekstensi arsitéktur set instruksi Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. Ditambahkeun dukungan pikeun Intel Diamond Rapids sareng Xeon Phi CPUs.
  • Ngalegaan kamampuan backend pikeun platform LoongArch sareng AVR.
  • Dipiceun rojongan pikeun arsitektur target nios2 dipaké dina prosesor Nios II. Rojongan pikeun ILP32 ABI (-mabi = ilp32) dina port AArch64 geus deprecated sarta bakal dihapus dina release utama salajengna.

sumber: opennet.ru

Tambahkeun komentar