A GCC 10 fordítócsomag kiadása

Egy év fejlesztés után közzétett ingyenes fordítókészlet kiadása GCC 10.1, az első jelentős kiadás az új GCC 10.x ágban. Vminek megfelelően új rendszer kiadási számokat, a 10.0-s verziót használták a fejlesztési folyamatban, és nem sokkal a GCC 10.1 megjelenése előtt már elágazódtak a GCC 11.0-s ágak, amelyek alapján a következő jelentős kiadás, a GCC 11.1 jön létre.

A GCC 10.1 a C++20 szabványhoz kifejlesztett C++ nyelvi újítások megvalósításáról, a jövőbeni C nyelvi szabványhoz (C2x) kapcsolatos fejlesztésekről, a fordítói háttérrendszerek új optimalizálásáról és a kísérleti támogatásról nevezetes. statikus elemzési mód. Ezenkívül egy új ág előkészítése során a projekt áthelyezte az adattárat az SVN-ről a Gitre.

A főbb változások:

  • Hozzáadva a statikus elemzés kísérleti módja"- fanalizátor“, amely egy programban a kódvégrehajtási utak és adatfolyamok erőforrásigényes interprocedurális elemzését végzi. Az üzemmód képes a fordítási szakaszban felmerülő problémák észlelésére, mint például a free() függvény dupla hívása egy memóriaterületre, fájlleíró szivárgások, nulla mutatók hivatkozás megszüntetése és átadása, felszabadult memóriablokkok elérése, inicializálatlan értékek használata stb. Az új mód OpenSSL kód használata már lehetővé tette az azonosítást veszélyes sebezhetőség.
  • Továbbfejlesztett eljárások közötti optimalizálás. Az IPA-SRA (Interprocedural Scalar Shared Replacement) átnevezést úgy alakították át, hogy kötési időben működjön, és többek között eltávolítja a kiszámított és visszaadott, fel nem használt értékeket. A "-O2" optimalizálási módban a "-finline-functions" opció engedélyezve van, amely áthangolódik, hogy a végrehajtási teljesítmény helyett a kompaktabb kódot részesítse előnyben. A soron belüli függvénytelepítés heurisztikai munkája felgyorsult. A beágyazott bővítési és függvényklónozási heurisztika mostantól felhasználhatja az értéktartományokra vonatkozó információkat az egyes átalakítások hatékonyságának előrejelzésére. A C++ esetében a típusalapú álnevek elemzésének pontossága javult.
  • Továbbfejlesztett összekapcsolási idő optimalizálás (LTO). Új végrehajtható fájl hozzáadva lto-dump az objektumfájlok információinak alaphelyzetbe állítása LTO bájtkóddal. A párhuzamos LTO-passzok automatikusan meghatározzák az egyidejűleg futó make-feladatok számát, és ha nem határozhatók meg, akkor a processzormagok számáról szóló információkat használják párhuzamosítási tényezőként. Hozzáadtuk az LTO bájtkód tömörítésének lehetőségét a zstd algoritmus segítségével.
  • A kódprofilozás eredményein alapuló optimalizálási mechanizmus (PGO - Profile-guided optimization) továbbfejlesztésre került, amely a kódvégrehajtás jellemzőinek elemzése alapján optimálisabb kódot generál. Továbbfejlesztett profilkarbantartás a fordítás és a hideg/meleg kódok szétválasztása során. Az opción keresztül-fprofile-értékek» immár akár 4 profilértéket is felügyelhet, például közvetett hívásokhoz és pontosabb profilinformációkhoz.
  • Párhuzamos programozási specifikáció megvalósítva C, C++ és Fortran nyelvekhez OpenACC 2.6, amely eszközöket határoz meg a GPU-kon és speciális processzorokon, például az NVIDIA PTX-en végzett műveletek tehermentesítéséhez. A szabvány bevezetése majdnem befejeződött Nyissa meg az MP 5.0-t (Open Multi-Processing), amely meghatározza az API-t és a párhuzamos programozási módszerek alkalmazásának módszereit többmagos és hibrid (CPU+GPU/DSP) rendszereken osztott memóriával és vektorizációs egységekkel (SIMD). Hozzáadott szolgáltatások, mint például a lastprivate feltételes feltételek, a vizsgálati és ciklus direktívák, az order és a use_device_addr kifejezések. Az OpenMP és az OpenACC esetében a negyedik generációs (Fidzsi-szigetek) és az ötödik generációs AMD Radeon (GCN) GPU-kon (VEGA 10/VEGA 20) végzett tehermentesítési műveletek támogatásával bővült.
  • A C család nyelveinél az „access” függvény hozzáadásra került, hogy leírja a függvény hozzáférését a hivatkozással vagy mutatóval átadott objektumokhoz, és az ilyen objektumokat az objektumok méretére vonatkozó információkat tartalmazó egész argumentumokhoz társítsa. Az „access” funkcióval együtt történő működéshez a „type” attribútumot implementálják a felhasználói funkciók helytelen hozzáférésének észlelésére, például amikor értékeket írnak a tömb határain kívül eső területre. Szintén hozzáadásra került a "symver" attribútum, amely egy ELF-fájlban lévő szimbólumokat adott verziószámokhoz társít.
  • Új figyelmeztetések hozzáadva:
    • "-Wstring-compare" (engedélyezve a "-Wextra"-val) - figyelmeztet olyan kifejezések jelenlétére, amelyekben a nullát összehasonlítják az strcmp és strncmp függvények meghívásának eredményével, ami egyenértékű egy konstanssal, mivel a hossz az egyik argumentum mérete nagyobb, mint a második argumentumban szereplő tömb mérete.
    • "-Wzero-length-bounds" (a "-Warray-bounds" beállítással engedélyezve) - figyelmeztet a nulla hosszúságú tömbelemek elérésére, ami más adatok felülírásához vezethet.
    • A „-Warray-bounds”, „-Wformat-overflow”, „-Wrestrict”, „-Wreturn-local-addr” és „-Wstringop-overflow” figyelmeztetések kibővültek a határon túli helyzetek számának növelése érdekében. amelyeket kezelnek.
  • Bevezette a széles karakterek közvetlen megadásának lehetőségét az azonosítókban az aktuális kódolás (alapértelmezés szerint UTF-8) használatával, nem pedig az UCN jelöléssel (\uNNNN vagy \UNNNNNNNN). Például:

    statikus const int π = 3;
    int get_naive_pi() {
    vissza π;
    }

  • A C nyelv esetében a C2X szabványon belül kifejlesztett új funkciók egy része implementálásra került (a -std=c2x és -std=gnu2x megadásával engedélyezve): megjelent a „[[]]” szintaxis támogatása az attribútumok meghatározásához, mint a C++ (például [[gnu ::const]], [[elavult]], [[fallthrough]] és [[maybe_unused]]. Az "u8" szintaxis támogatása az UTF-8 karaktereket tartalmazó konstansok meghatározásához.
    Új makrók hozzáadva a fájlhoz. "%OB" és "%Ob" helyettesítések hozzáadva az strftime-hez.

  • A C alapértelmezett módja a „-fno-common”, amely egyes platformokon hatékonyabb hozzáférést tesz lehetővé a globális változókhoz.
  • A C++ esetében mintegy 16 változtatást és újítást hajtottak végre, amelyeket a C++20 szabványban fejlesztettek ki. Beleértve a hozzáadott „constitin” kulcsszót
    és bevezetésre került a sablonbővítmények támogatása "fogalmak". A fogalmak lehetővé teszik olyan sablonparaméter-követelmények meghatározását, amelyek a fordítási időben korlátozzák a sablonparaméterként elfogadható argumentumok készletét. A fogalmak segítségével elkerülhetők a logikai inkonzisztenciák a sablonon belül használt adattípusok tulajdonságai és a bemeneti paraméterek adattípus tulajdonságai között.

  • A G++ lehetővé teszi a konstans objektumok constexpr-en keresztüli megváltoztatása által okozott meghatározatlan viselkedés észlelését. Csökkentett memóriafelhasználás a fordító által a constexpr kiszámításakor. Új figyelmeztetések hozzáadva: „-Wmismatched-tags” és „-Wredundant-tags”.
  • Új parancssori beállításokat javasoltak:
    • "-fallocation-dce" a szükségtelen "new" és "delete" operátorpárok eltávolításához.
    • "-fprofile-partial-training" a méretoptimalizálás letiltásához olyan kódoknál, amelyekhez nem tartozik tanítási futás.
    • "-fprofile-reproducible a profil reprodukálhatóságának szabályozásához.
    • "-fprofile-prefix-path" a külön profilgeneráláshoz használt alapforrás-összeállítási könyvtár meghatározásához (az "-fprofile-generate=profile_dir" és a "-fprofile-use=profile_dir" esetén).
  • Az említett opciók figyelmeztető szövegében hiperhivatkozások találhatók, amelyek lehetővé teszik ezen opciók dokumentációjának elérését. Az URL-ek helyettesítését a "-fdiagnostics-urls" opcióval lehet szabályozni.
  • Előfeldolgozó operátor hozzáadva "__beépített", amely a beépített funkciók ellenőrzésére használható.
  • Új beépített „__builtin_roundeven” függvény hozzáadva az ISO/IEC TS 18661 specifikációban meghatározott kerekítési függvény megvalósításához, hasonlóan a „round”-hoz, de a 0.5-nél nagyobb részt kerekíti felfelé (nagyobb értékre), kisebb, mint 0.5 - lefelé (nulláig), és egyenlő 0.5-tel - az utolsó előtti számjegy paritásától kezdve.
  • Az AArch64 architektúrához hozzáadták az SVE2 kiterjesztés támogatását, és továbbfejlesztették az SVE (Scalable Vector Extension) támogatását, beleértve a beépített SVE ACLE funkciók és típusok támogatását, valamint a vektorizálás használatát. Bővült az LSE (Large System Extensions) és a TME (Transactional Memory Extension) támogatása. Az Armv8.5-A-ban és az Armv8.6-A-ban javasolt új utasítások hozzáadva, beleértve a véletlenszám-generálásra, kerekítésre, memóriacímke-kötésre vonatkozó utasításokat,
    bfloat16 és mátrixszorzás. Hozzáadott processzor támogatás
    Cortex-A77 kar,
    Cortex-A76AE kar,
    Cortex-A65 kar,
    Cortex-A65AE kar,
    Kar Cortex-A34 és
    Marvell ThunderX3.

  • Az ABI FDPIC (32 bites funkciómutatók) támogatása hozzáadva az ARM64-hez. A 64 bites egész műveletek újratervezett és optimalizált feldolgozása. CPU támogatás hozzáadva
    Cortex-A77 kar,
    Kar Cortex-A76AE és
    Cortex-M35P kar. Kibővített támogatás az ACLE adatfeldolgozási utasításokhoz, beleértve a 32 bites SIMD-t, a 16 bites szorzást, a reteszelő aritmetikát és egyéb DSP-algoritmus-optimalizálásokat. Kísérleti támogatás hozzáadva az ACLE CDE (Custom Datapath Extension) utasításokhoz.

  • Jelentősen továbbfejlesztett kódgenerálás és vektorizálás a GCN mikroarchitektúrán alapuló AMD GPU-k háttérrendszerében.
  • Az XMEGA-szerű eszközök támogatása hozzáadva az AVR architektúrához
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmegame808game809 , ATmega1608, ATmega1609 3208, ATmega3209 és ATmega4808.

  • Az IA-32/x86-64 architektúrákhoz egy új Intel ENQCMD utasításkészlet-architektúra-kiterjesztés (-menqcmd) került hozzáadásra. Hozzáadott támogatás az Intel Cooperlake (-march=cooperlake, tartalmazza az AVX512BF16 ISA kiterjesztést) és a Tigerlake (-march=tigerlake, tartalmazza a MOVDIRI, MOVDIR64B és AVX512VP2INTERSECT ISA bővítményeket) CPU-khoz.
  • A HSAIL (Heterogeneous System Architecture Intermediate Language) heterogén számítástechnikai rendszerek HSA architektúrán alapuló implementációja elavult, és valószínűleg eltávolítják egy jövőbeli kiadásban.

Forrás: opennet.ru

Hozzászólás