GCC 15 kompilatoru komplekta izlaišana

Pēc gada izstrādes ir izdota brīvā kompilatoru pakotne GCC 15.1, pirmais būtiskais izlaidums jaunajā GCC 15.x zarā. Saskaņā ar izlaidumu numurēšanas shēmu, versija 15.0 tika izmantota izstrādē, un drīz pirms GCC 15.1 iznākšanas jau ir sākusies GCC 16.0 atzars, uz kura pamata tiks izstrādāts nākamais nozīmīgais izlaidums GCC 16.1.

Galvenās izmaiņas:

  • Programmu kompilēšanai C valodā pēc noklusējuma tiek izmantota standarts C23 (izmaiņu apskats) ar GNU paplašinājumiem („-std=gnu23”). Iepriekš noklusētais standarts bija C17 — „-std=gnu17”). Šī izmaiņa var radīt problēmas esošo projektu veidošanā, jo tiek iekļauta konstante nullptr, tips _BitInt(n) un atslēgvārdi bool, true un false, kas var konfliktēt ar lietojumprogrammās norādītajām identifikatoriem ar tādu pašu nosaukumu.
  • Ir īstenotas C23 standarta iespējas:
    • Direktīva „#embed”, kas paredzēta bināro resursu iekļaušanai kodā.
    • Atribūts „unsequenced”, kas norāda, ka rezultāts nav atkarīgs no izpildes secības.
    • Atribūts „reproducible”, kas norāda, ka funkcija vienmēr atgriež to pašu rezultātu, izmantojot tos pašus ievades datus, t.i., tā nav atkarīga no citiem faktoriem.
  • Ir īstenoti nākamā standarta C2Y elementi (-std=c2y un -std=gnu2y):
    • Iespēja deklarēt mainīgos „if” operatorā, piemēram, „if (int x = get ()) {…}”.
    • Atbalsts ciklu nosaukumu norādīšanai, lai varētu uz tiem atsaukties kodā. outer: for (int i = 0; i < IK; ++ i) { switch (i) { case 1: break; // pārlēkt uz CONT1 case 2: break outer; // pārlēkt uz CONT2 } // CONT1 } // CONT2
    • Atbalsts veselo skaitļu diapazonu norādīšanai „case” izteiksmēs, piemēram, „case 1 … 10:”.
    • Sufiksi „i” un „j” kompleksajos skaitļos, lai apzīmētu iemīto daļu.
    • Iespēja izmantot operatorus „++” un „—” kompleksajos skaitļos.
    • Konstrukcija „_Generic(type, expr1, expr2, …)” izteiksmju izvēlēšanai atkarībā no operandā esošā tipa.
    • Atbalsts byte masīvu izmantošanai kā citu veidu objektus, piemēram, struktūras un apvienojumus.
    • Atbalsts „alignof” operatora piemērošanai nepilnīgiem masīviem (deklarētiem bez izmēra norādīšanas, piemēram, „int a[]”).
    • Tika ir papildināta ar jaunu sintaksi astoņciparu, sešpadsmitciparu un universālu simbolu escape-sekvencēm. Tā vietā, lai izmantotu «\u», «\x» un «\nnn», tiek piedāvātas sekvences «\u{}», «\o{}» un «\x{}», kurās var norādīt patvaļīgu ciparu skaitu.
    • Iebūvētās funkcijas «__builtin_stdc_rotate_left» un «__builtin_stdc_rotate_right».
    • Atļautas operācijas ar nulļu garuma norādītājiem NULL (piemēram, «sizeof(*p)».
  • Frontendā C++ valodai ir ieviestas iespējas, kas tiek attīstītas nākotnes standarta C++26 ietvaros:
    • Variablais operators «friend» («friend Ts…»).
    • Iespēja izmantot atslēgvārdu «constexpr» ar «new» operatora tipu (placement new), lai izvietotu objektu iepriekš rezervētajā atmiņā kompilācijas laikā.
    • Kļūdas izvadīšana, dzēšot norādītāju uz nepilnu tipu.
    • Atzīts par novecojušu sintakse variatīvo parametru definēšanai ar daudzpunkti bez iepriekšējas komata (piemēram, kad tiek norādīts «void e(int…)» vietā «void e(int, …)»).
    • Parametru paketes indeksēšana veidnēs.
    • Atribūti strukturētām saistībām;
    • Sintakse ‘= delete(«cēlonis»)’;
    • Iekļaušana «@», «$» un «`» pamatsimbolu kopā.
    • Aizliegts izmantot makrosu, lai deklarētu moduļus.
    • Iespēja izmantot strukturētu saistīšanu kā nosacījumu if un switch operatoros.
    • Tiešās masīvu salīdzināšanas atbalsts ir pārtraukts (piemēram, «int arr1[5]; int arr2[5]; bool same = arr1 == arr2»).
    • Mekanisms «#embed» bināro resursu iekļaušanai.
    • Atzīts par novecojušu veidni is_trivial.
  • C++23 iespēju pievienošana:
    • Dažu «export» direktīvu pielietošanas aizliegums un «export {}» izmantošanas atļaušana.
    • Atbalsts pagaidu objektu mūža pagarināšanai ciklos «for», kas pārskata diapazonus.
  • Bibliotēkā libstdc++ ir ieviests eksperimentāls modulu std un std.compat atbalsts.
  • Ievada iniciators «{0}» apvienojumos C un C++ kodā vairs negarantē visu satura iztukšošanu, bet noved pie pirmā apvienojuma elementa nulles. Lai iztukšotu visu apvienojumu, jāizmanto izteiksme «{}», kas noteikta C23 specifikācijā, vai jānorāda opcija «-fzero-init-padding-bits=unions», lai atjaunotu iepriekšējo rīcību.
  • Atbalsts atribūtam «musttail» ([[gnu::musttail]] un [[clang::musttail]]) tiek īstenots garantētiem astes izsaukumiem. Atribūts tiek piemērots return izteiksmēm, kurās tiek veikta pašreizējās funkcijas rekursīvā izsaukšana, un garantē, ka šāds izsaukums izmantos astes rekursiju, ietaupot papildu atmiņu stekā (izslēdzot risku izsīkt atmiņā ļoti lielā izsaukumu skaitā).
  • Ieviešana atbalsta atribūtam flag_enum ([[gnu::flag_enum]] un [[clang::flag_enum]]), kas tiek izmantots pie enumerācijām, lai norādītu, ka saturs tiek izmantots bitu operācijās (izslēdz brīdinājuma izvadīšanu režīmā „-Wswitch”).
  • Tika pievienots atbalsts atribūtam „counted_by”, caur kuru var norādīt lauku struktūrā ar elastīgu masīvu, kas nosaka elementu skaitu. Atribūts var tikt izmantots, lai uzlabotu pārbaudes efektivitāti, izejot ārpus bufera.
  • Funkcijām pievienots atribūts „nonnull_if_nonzero”, kas nosaka, ka daži funkciju parametri ar norādītājiem var pieņemt NULL tikai tad, ja cits parametrs ir vienāds ar nulli.
  • Ir atļauts izmantot paplašinātas assemblera ievietošanas „asm (….)” ārpus funkcijām. Assemblera ievietojumos ir atļauts pārrakstīt atmiņu sarkanajā steka zonā (jonā augšpusē no steka).
  • C++ koda kompilācija ir paātrināta, pateicoties uzlabotai šablonu hashēšanai.
  • Ir pievienotas jaunas optimizācijas. Ieviests atbalsts ciklu vektorizācijai, kuros ir kods priekšlaicīgai izejai (piemēram, caur break vai return izsaukumiem), pat ja šādi cikli manipulē dinamiski piešķirtiem masīviem vai buferiem, kuru izmērs nav zināms kompilācijas laikā. Izmantojot opciju „-O2”, ir iekļauta viegli vektorizējamu ciklu vektorizācija, par kuriem nav informācijas par iterāciju skaitu (tripcount).
  • Ir pievienots inkrementālās optimizācijas režīms saistīšanās posmā (LTO, Link-Time Optimization), kas būtiski samazina pārrakstīšanas laiku, izmantojot LTO situācijās, kad kodā veiktas nelielas izmaiņas (redigēta viena funkcija). Lai ieslēgtu inkrementālo režīmu, tiek piedāvāta opcija „-flto-incremental”.
  • Ir uzlabota ļoti lielu ieejas failu kompilācija. Ieviests kolonnas numuru izsekošanas atbalsts, kas pārsniedz 4096. Uzlabota kļūdu un brīdinājumu atrašanās vietas precizitāte ļoti lielos failos.
  • Uzlabota ziņojumu vizualizācija problēmu diagnosticēšanā. Piemēram, nodrošināta problēmas rašanās vietas izcelšana ar simbolu „⚠️”, izmainīta izvades struktūra C++ šablonu kļūdām, pievienotas norādes, lai atvieglotu pāreju uz standartu C23, un pārstrādāta krāsu shēma. Ir pievienota iespēja diagnosticēt izvadi Sarif formātā (-fdiagnostics-format=sarif-file).
  • Ieviesta bibliotēka libgdiagnostics, kas ļauj integrēt savos projektos GCC saistītās diagnostikas ziņojumu noformēšanas funkcijas (piemēram, var izmantot citēšanas, iezīmēšanas un labojumu norādīšanas rīkus).
  • Pievienoti brīdinājumi «-Wtrailing-whitespace» un «-Wleading-whitespace», lai identificētu liekos atstarpes beigu rindās un nevēlamās atstarpes rindu sākumā.
  • Pievienots brīdinājums «-Wheader-guard» par problēmām galvenes failu aizsargājošajos makros, kas novērš galvenes failu atkārtotu iekļaušanu.
  • Frontend valodai D atjaunots līdz versijai 2.111.0.
  • Frontend valodai Fortran pievienota atbalsts bezzīmju veseliem skaitļiem.
  • Iekļauts kompilators valodai COBOL — gcobol, kas atbalsta x86-64 un AArch64 platformas un nav paredzēts lietošanai 32 bitu sistēmās. Kompilators īsteno ISO/IEC 1989:2023 specifikāciju un iziet lielāko daļu NIST CCVS/85 testu.
  • Turpināta OpenMP 5.0, 5.1, 5.2 un 6.0 standartu īstenošana, kas nosaka API un metodes paralēlā programmēšanā daudzkodolu un hibrīdās (CPU+GPU/DSP) sistēmās ar kopēju atmiņu un vektorizācijas bloki (SIMD). Pievienota metadirektīvu un konstrukciju tile, unroll, interop un dispatch atbalsts. Dažiem AMD un NVIDIA GPU pievienots vienotās koplietošanas atmiņas atbalsts (ieslēdzams, norādot unified_shared_memory direktīvā «requires»). Pievienots «self_maps» izteiksmes atbalsts.
  • AArch64 arhitektūras backendā pievienots MinGW platformas (aarch64-w64-mingw32) atbalsts. Realizēti vairāk nekā 20 ARM8 paplašinājumi un uzlabots ACLE (Arm C Language Extensions) paplašinājuma atbalsts. Veikti daudzi uzlabojumi kodu ģenerēšanas komponentē. Pievienots CPU atbalsts:
    • Apple A12 (apple-a12)
    • Apple M1 (apple-m1)
    • Apple M2 (apple-m2)
    • Apple M3 (apple-m3)
    • Arm Cortex-A520AE (cortex-a520ae)
    • Arm Cortex-A720AE (cortex-a720ae)
    • Arm Cortex-A725 (cortex-a725)
    • Arm Cortex-R82AE (cortex-r82ae)
    • Arm 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 (grace)
    • NVIDIA Olympus (olympus)
    • Qualcomm Oryon-1 (oryon-1)
  • GPU AMD Radeon (GCN) koda ģenerēšanas backendā ieviests atbalsts bibliotēkai libstdc++ un pievienots eksperimentāls koda ģenerēšanas atbalsts iekārtu sērijām gfx9-generic, gfx10-3-generic un gfx11-generic.
  • Backend for x86 architecture has added support for Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS instruction set architecture extensions. Support for Intel Diamond Rapids and Xeon Phi CPUs has also been added.
  • Backend capabilities for LoongArch and AVR platforms have been expanded.
  • Support for the nios2 target architecture used in Nios II processors has been removed. The ABI ILP32 (-mabi=ilp32) support in the AArch64 port has been declared deprecated and will be removed in the next major release.

Avots: opennet.lv

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster