Po metų plėtros Išleista nauja GCC 11.1 kompiliatorių paketo versija, pirmasis reikšmingas leidimas naujame GCC 11.x filiale. Pagal naująją versijų numeravimo schemą kūrimo metu buvo naudojama 11.0 versija, o prieš pat GCC 11.1 išleidimą GCC 12.0 filialas jau buvo įtemptas, kad suformuotų kitą pagrindinę GCC 12.1 versiją.
„GCC 11.1“ išsiskiria perėjimu į numatytąjį derinimo failo formatą „DWARF 5“, numatytasis C ++ 17 standarto įtraukimas ("-std = gnu ++ 17"), reikšmingi suderinamumo su C ++ 20 patobulinimai, eksperimentinė parama C ++ 23, patobulinimai, susiję su būsimu standartu C kalba (C2x), nauji našumo optimizavimai.
PĮKT 11.1 Pagrindinės naujos savybės
Numatytasis C ++ kalbos režimas pakeistas, kad būtų naudojamas C ++ 17 standartas, vietoj anksčiau pasiūlyto C ++ 14. Apdorojant šablonus, kurie kaip parametrą naudoja kitus šablonus (-fno-new-ttp-matching), galima pasirinktinai išjungti naują C ++ 17 elgesį.
Pridėta aparatūros pagreičio palaikymas įrankio „AddressSanitizer“, kuris leidžia nustatyti faktus, kaip pasiekti atlaisvintas atminties sritis, viršyti skirto buferio ribas ir kai kurias kitas klaidų rūšis dirbant su atmintimi. Šiuo metu aparatūros pagreitis galimas tik „AArch64“ architektūrai ir yra sutelktas į jo naudojimą kompiliuojant „Linux“ branduolį.
Kita pristatoma naujovė yra optimizavimas ir patobulinimai tarp procedūrų, nes buvo pridėtas naujas IPA-modref leidimas (-fipa-modref), kad būtų galima stebėti šalutinius efektų iškvietimus ir pagerinti analizės tikslumą. Be to, a patobulintas IPA-ICF leidimo įgyvendinimas (-fipa-icf), kuris sumažina kompiliavimo atminties sunaudojimą ir padidina vieningų funkcijų, kurioms yra sujungti vienodi kodų blokai, skaičių.
El profiliu pagrįstas optimizavimo variklis (PGO), patobulintas „-profile-value“ režimas stebėdami daugiau netiesioginių skambučių parametrų.
taip pat Pažymėtas tolesnis „OpenMP 5.0“ standarto diegimas („Open Multi-Processing“), kuriame pridėta pradinė parama priskyrimo direktyvai ir galimybė naudoti nevienodas kilpas „OpenMP“ versijose. Dabar palaikomas aplinkos kintamasis OMP_TARGET_OFFLOAD.
Patobulintas „OpenACC 2.6“ lygiagretaus programavimo specifikacijos, numatytos C, C ++ ir Fortran kalboms, apibrėžimas įrankių perkėlimui į GPU ir specializuotiems procesoriams, pvz., „NVIDIA PTX“, atlikti.
C šeimos kalboms buvo įdiegtas naujas atributas „no_stack_protector“, suprojektuoti funkcijoms, kurių apsauga nuo rietuvės neturėtų būti įjungta, pažymėti („-fstack-protector“). „Malloc“ atributas buvo išplėstas palaikant skambučių porų identifikavimą ir atminties atlaisvinimą, kuris naudojamas statiniame analizatoriuje nustatant tipines atminties klaidas (atminties nutekėjimą, naudojimą po nemokamų funkcijų, dvigubus iškvietimus į nemokamą funkciją ir kt.) ir kompiliatoriaus įspėjimus „-Wmismatched-dealloc", "-Wmismatched- new-delete" ir " -Nemokamai be objekto objektas "praneša apie nenuoseklias sandorių ir sandorių išdėstymo operacijas.
Generuojant derinimo informaciją pagal numatytuosius nustatymus naudojamas DWARF 5 formatas, kuris, palyginti su ankstesnėmis versijomis, leidžia generuoti derinimo duomenis, kurie yra 25% kompaktiškesni. Visam DWARF 5 palaikymui reikalingi „binutils“ bent 2.35.2 versija.
Patobulintos „ThreadSanitizer“ režimo galimybės (-fsanitize = thread), nes taipprideda paramą alternatyviems vykdymo laikams ir aplinkai, taip pat palaikymas „Kernel Concurrency Sanitizer“ (KCSAN) derinimo įrankiui, siekiant dinamiškai aptikti lenktynių sąlygas „Linux“ branduolyje. Pridėtos naujos parinktys „–param tsan-erzinti-nepastovu“ ir „-param tsan-instrument-func-entry-exit“.
Vektorizatorius pateikia viso funkcijos turinio apskaitą ir papildomą galimybių, susijusių su sankryžomis, apdorojimą ir nuorodas į ankstesnius valdymo srauto diagramos (CFG) blokus.
Optimizavimo priemonė turi galimybę sąlyginių operacijų seriją paversti pokyčių išraiška, kurioje lyginamas tas pats kintamasis. Ateityje pakeitimo išraišką galima užkoduoti naudojant bitų bandymo instrukcijas (norint valdyti šią konversiją, pridėta parinktis „-fbit-tests“).
C ++ atveju buvo įgyvendinta dalis C ++ 20 standarte siūlomų pakeitimų ir naujovių, įskaitant virtualias funkcijas „consteval virtual“, pseudo-destruktorius objektų gyvavimo ciklui nutraukti, naudojant enum klasę ir apskaičiuojant masyvo dydis posakyje „naujas“.
Jei norite apie tai sužinoti daugiau, išsamią informaciją galite sužinoti šią nuorodą.