GCC 16

GCC 16

Nakon godine razvoja objavljeno izlazak slobodnog seta kompajlera GCC 16.1, prvi značajan izdanak u novoj grani GCC 16.x. U skladu s shemom numeracije izdanja, verzija 16.0 korištena je u procesu razvoja, a nedugo prije izlaska GCC 16.1 već je stvorena grana GCC 17.0, na kojoj će se temeliti sljedeće značajno izdanje GCC 17.1.

Glavne promjene:

  • Zadani način za jezik C++ prebačen je na korištenje standarda C++20 (-dialekt GNU C++20, -std=gnu++20) umjesto ranije predloženog C++17. Implementacija C++20 u standardnoj knjižnici proglašena je stabilnom.
  • Uključena je eksperimentalna prednja strana ga68 za kompajliranje programa napisanim u programskom jeziku Algol 68.
  • Dodana je mogućnost ispisivanja dijagnostičkih informacija u HTML formatu. Proširene su informacije o napretku programa uključene pri ispisu dijagnostike u formatu SARIF, temeljenom na JSON-u (podrška za „-fdiagnostics-format=json” obustavljena).
  • Povećane su optimizacije u fazi povezivanja (LTO, Link-Time Optimization). Dodana je opcija „-flto-toplevel-asm-heuristics”, koja uključuje heuristiku za poboljšanje optimizacije koda s asemberskim umetanjima. Tehnika spekulativne devirtualizacije (-fdevirtualize-speculatively) sada nije ograničena na transformaciju virtualnih metoda i može se primjenjivati pri transformaciji u izravne pozive bilo kojih neizravnih poziva funkcija, na primjer, poziva putem pokazivača.
  • Implementirana je podrška za vektorizaciju petlji, za koje u fazi kompajliranja nije poznat broj iteracija. Povećana je učinkovitost obrade prijevremenih izlaza iz petlje (na primjer, putem break-a).
  • Dodana je eksperimentalna podrška mnogo mogućnosti nedavno odobrenog standarda C++26. Na primjer, implementirani su:
    • Refleksija (Reflection, „-freflection”), koja omogućuje praćenje i modificiranje elemenata programa u fazi kompajliranja. Dodani su novi operatori „^^ (open-std.org)za dobivanje metainformacija o gramatičkoj konstrukciji i „[:…:]za izvođenje obratne transformacije. Za transformaciju i obradu dobivenih informacija tijekom inspekcije predložena je biblioteka std::meta i dostupne su takve mogućnosti kao što su izračuni s konstantama.
    • Ugovorno programiranje (Contracts), koja omogućuje određivanje formalnih specifikacija sučelja pomoću tri nova operatora: pre (preduslov), post (poslijeuslov) i contract_assert (provjera afirmacije). Operator „pre“ definira prethodne uvjete koji moraju biti ispunjeni prije poziva (provjera ulaznih podataka); „post“ – uvjete koji se moraju poštovati nakon izvršenja (zahtjevi za izlazne podatke); contract_assert – uvjete koji uzrokuju iznimke. Mogućnost će se pojaviti u GCC 16.
    • Operator „template for“ za iteriranje elemenata, poput paketa parametara, sličnih tuple objektima i rezultatima refleksije (metaobjekti), u vrijeme kompajliranja u stilu obične petlje. Kada se izvodi „template for“, tijelo petlje se otvara za svaki element, a svaka iteracija se obrađuje u zasebnoj vidljivosti, gdje je element sekvence kroz koju se iterira petlja, konstanta za svaku iteraciju i može sudjelovati u konstantnim izrazima (constexpr). U kontekstu refleksije „template for“ može se primjenjivati za prolazak kroz svojstva klasa ili enumeracija.
    • Biblioteka std::simd za paralelizaciju izvođenja operacija nad podacima koristeći skupove instrukcija SIMD, poput AVX-512 i NEON, s korištenjem standardnog sustava tipova C++.
    • Biblioteke std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic i std::owner_equal.
  • Implementirane su mogućnosti vezane uz standard C++23, poput eksplicitnog upravljanja vremenom života objekata i podrška označavanja kodiranja znakova dijagnostičkih poruka.
  • Proširena podrška standarda C23 (opennet.ru), na primjer, implementirana je mogućnost korištenja atributa „counted_by“ za provjeru ispravne upotrebe pokazivača.
  • Nastavljena implementacija standarda OpenMP 5.0, 5.1, 5.2 i 6.0 (Open Multi-Processing), koji definiraju API i načine primjene metoda paralelno programiranje na višenitnim i hibridnim (CPU+GPU/DSP) sustavima s zajedničkom memorijom i blokovima vektorizacije (SIMD). Unaprijeđena implementacija specifikacija paralelno programiranje OpenACC 3.0, 3.3 i 3.4, koji definiraju sredstva za offloading operacija na GPU i specijalizirane procesore, poput NVIDIA PTX.
  • U backendu za x86 arhitekturu dodana je podrška za AMD procesore temeljen na mikroarhitekturi Zen6 (-march=znver6), kao i za Intel Wildcat Lake procesore (-march=wildcatlake) i Nova Lake (-march=novalake).
  • U backendu za generiranje koda za AMD Radeon GPU (GCN) implementirana je podrška za AMD Instinct MI300 akceleratore (gfx942).
  • Za RISC-V, ARM, S/390 i LoongArch arhitekture implementirana je podrška za tip ‘_BitInt (N)’ za definiranje cijelih brojeva s specificiranim brojem bita.

Izvor: linux.org.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster