GCC 16

GCC 16

Egy év fejlesztés után megjelent szabad fordítóprogram-csomag kiadása GCC 16.1, az első jelentős kiadás az új GCC 16.x ágon. A kiadási számok sorendje szerint, a 16.0 verziót a fejlesztés során használták, és nem sokkal a GCC 16.1 megjelenése előtt már elágazott a GCC 17.0, amelynek alapján a következő jelentős régi, a GCC 17.1 lesz.

Fő változások:

  • A C++ nyelv alapértelmezett módja átállt a C++20 (GNU C++20 dialektus, -std=gnu++20) használatára a korábban javasolt C++17. A C++20 implementáció a szabványos könyvtárban stabilnak van nyilvánítva.
  • Egy kísérleti frontend került bevezetésre ga68 algol 68 programozási nyelven írt programok fordításához.
  • Lehetőség van diagnosztikai információk HTML formátumban történő megjelenítésére. Kiterjesztve lett a program futásáról szóló információ, amelyet a diagnosztikai kimeneti formátumban SARIF, JSON alapú (a «-fdiagnostics-format=json» támogatása megszűnt).
  • Kiterjesztették a kötési optimalizálások (LTO, Link-Time Optimization) lehetőségeit. Hozzáadva a «-flto-toplevel-asm-heuristics» opciót, amely a kód optimalizálásának javítására szolgáló heurisztikát tartalmaz a beágyazott assembly kódokkal. A spekulatív devirtualizációs technika (-fdevirtualize-speculatively) mostantól nem korlátozódik a virtuális metódusok átalakítására, hanem közvetett függvényhívások, például mutatók általi hívások közvetlen hívásokká való átalakítására is alkalmazható.
  • Ciklusok vektorizálásának támogatása valósult meg, ahol a fordítási folyamat során nem ismert az iterációk száma. Növelve lett a ciklusból való korai kilépések (például break segítségével) kezelésének hatékonysága.
  • Kísérleti támogatás került hozzáadásra sok funkciót biztosít most jóváhagyott szabvány C++26. Például megvalósítva lett:
    • Reflexió (Reflection, «-freflection»), amely lehetővé teszi a program elemeinek nyomon követését és módosítását a fordítási szakaszban. Új operátorok kerültek bevezetésre^^ (open-std.org)» metainformációk nyerésére a grammatikai konstrukcióról és «[:…:]» az ellentétes átalakításhoz. A vizsgálat során nyert információk átalakításához és feldolgozásához a std::meta könyvtár javasolt, és elérhetők olyan lehetőségek, mint a konstansokkal végzett számítások.
    • Szerződésprogramozás (Contracts), amely lehetővé teszi a formális interfészspecifikációk meghatározását három új operátor segítségével: pre (előfeltétel), post (utófeltétel) és contract_assert (állítás ellenőrzés). Az „pre” operátor a szükséges előfeltételeket határozza meg, amelyeket a hívás előtt teljesíteni kell (bemeneti adatok ellenőrzése); a „post” azokat a feltételeket, amelyeket a teljesítés után be kell tartani (kimeneti adatok követelményei); a contract_assert az exceptions keletkezésének feltételeit. Ez a lehetőség a GCC 16-ban jelenik meg.
    • Az operátor „template for” az elemek, például a paramétercsomagok, tuple-szerű objektumok és a reflexió eredmények átlépésére szolgál, a fordítási időszakban, hagyományos ciklusstílusban. A „template for” végrehajtásakor a ciklus törzse minden egyes elemre kibővül, és minden egyes iterációt külön láthatósági területen dolgoznak fel, ahol a ciklus által iterált sorozat eleme állandó minden iterációhoz és részt vehet állandó kifejezésekben (constexpr). Reflexió összefüggésében a „template for” osztályok vagy felsorolások tulajdonságainak megkeresésére alkalmazható.
    • A std::simd könyvtár az adatokkal végzett műveletek párhuzamosítására szolgáló SIMD utasításkészletek, például AVX-512 és NEON használatával, a C++ szabványos típusú rendszerekkel.
    • A std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic és std::owner_equal könyvtárak.
  • A C++23 szabványnak megfelelően megvalósított lehetőségek, mint például explicit az objektumok élettartamának kezelésére és Passkey a diagnosztikai üzenetek karakterkódolásának megadására.
  • A C23 (opennet.ru), például a „counted_by” attribútum használatának lehetősége a pointerek használatának helyességének ellenőrzésére lett megvalósítva.
  • tisztítás folytatódik A OpenMP 5.0, 5.1, 5.2 és 6.0 (Open Multi-Processing) megvalósítása, amely meghatározza az API-t és a többmagos és hibrid (CPU+GPU/DSP) rendszereken történő párhuzamos programozási módszerek alkalmazásának módját a közös memóriával és a vektorizáló egységekkel (SIMD). a mappa hozzáférés ellenőrzése, ahová a felhasználó fájlt szeretne feltölteni (először a Firefox megpróbál ott ideiglenes fájlt létrehozni az ellenőrzéshez, és ha ez nem sikerül, hibaüzenetet ad ki a letöltési panelen). A párhuzamos programozás specifikációinak megvalósítása OpenACC 3.0, 3.3 és 3.4, amelyek eszközöket határoznak meg a GPU-ra és a speciális processzorokra, például az NVIDIA PTX-re irányuló műveletek elvágására (offloading).
  • A x86 architektúrájú háttérbe integrálva lett az AMD Zen6 mikroarchitektúrájára épülő processzorok támogatása (-march=znver6), valamint az Intel Wildcat Lake (-march=wildcatlake) és Nova Lake (-march=novalake) processzoroké.
  • A GPU AMD Radeon (GCN) kódgeneráló háttérben támogatást kapott az AMD Instinct MI300 (gfx942) gyorsítókhoz.
  • A RISC-V, ARM, S/390 és LoongArch architektúrák esetében megvalósították a „_BitInt (N)” típus támogatását, amely lehetővé teszi a megadott bitmennyiségű egész számok meghatározását.

Forrás: linux.org.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster