A GCC fejlesztői kiadták a GCC 16.1-et, a GCC 16 sorozat első stabil kiadását a GNU Compiler Collection részeként. A kiadás új alapértelmezett működést vezet be a C++ buildjeihez, bővíti a nyelvi támogatást, fejleszti a diagnosztikát, és javítja a friss hardverek célplatform-támogatását.
A legfontosabb változás, hogy a GCC C++ frontendje mostantól alapértelmezés szerint GNU C++20-at használ GNU C++17 helyett. Azoknál a projekteknél, amelyek egy régebbi C++ szabványra építenek, szükség lehet a
-std=
opció megadására a build kapcsolói között, vagy a forráskód frissítésére a GCC 16-hoz. A C++20 könyvtártámogatás mostanra stabil, a C++20 modulok viszont továbbra is kísérletiek, és még mindig igénylik a
-fmodules
kapcsolót.
Ezen felül a GCC 16.1 kísérleti támogatást hoz több C++26 funkcióhoz is, köztük a reflectionhöz, a contractshez, az expansion statementekhez, a
constexpr
kivételekhez, valamint a kapcsolódó standard library bővítésekhez, például a
std::simd
-hez, a
std::inplace_vector
-hoz, a
std::optional<T&>
-hez, a
std::copyable_function
-höz és a
std::function_ref
-hez.
Emellett hozzáadtak egy új, kísérleti Algol 68 compiler frontendet, a
ga68
-at. A GCC projekt szerint ez a frontend a Revised Reportban leírt nyelvet célozza, a jóváhagyott javításokkal együtt, és megvalósít néhány GNU-kiterjesztést, valamint egy POSIX prelude-ot.
A diagnosztika is frissült: a GCC 16 már képes kísérleti HTML formátumban is diagnosztikát készíteni, a SARIF kimenet pedig új vezérlésifolyamat-információkat tartalmaz. Eltávolították a régebbi JSON diagnosztikai formátumot, a géppel feldolgozható diagnosztikához pedig a SARIF használatát javasolják.
A kiadás kiterjeszti a C23
_BitInt
támogatását további célplatformokra is, köztük a RISC-V-re, Armra, S/390-re és LoongArchra. A C frontend mostantól támogatja a counted-by attribútumot pointer mezőknél, a Fortran coarray megvalósítása pedig megosztott memóriás többszálúsítási támogatást kapott egycsomópontos rendszereken.
A GCC 16.1 optimalizálási fejlesztéseket is tartalmaz, például jobb vektorizálást, a nem számlált ciklusok vektorizálásának támogatását, valamint a redukciók és a korai kilépések jobb kezelését. A Link-Time Optimization most már hatékonyabban kezeli a legfelső szintű assembly utasításokat a
-flto-toplevel-asm-heuristics
segítségével. A spekulatív devirtualizációt is kiterjesztették, így már az általános indirekt függvényhívásokat és több spekulatív célpontot is támogat.
A hardvertámogatás is frissült. x86-on a GCC 16 támogatást ad az AMD Zen 6-hoz a
-march=znver6
kapcsolóval, az Intel Wildcat Lake-hez a
-march=wildcatlake
-kel, valamint az Intel Nova Lake-hez a
-march=novalake
-kel. Az AMD GPU offloading mostantól kísérleti MI300 támogatást is tartalmaz, a LoongArch és az IBM Z pedig további compiler fejlesztéseket kapott.
A korábbi nagy GCC kiadásokhoz hasonlóan előfordulhat, hogy néhány, régebbi verziókkal még leforduló kód módosítást igényel a GCC 16.1-gyel történő fordításhoz. További részletekért nézd meg a bejelentést, vagy olvasd el a kiadási megjegyzéseket.
A GCC 16.1 már elérhető a GNU projekt kiadási szerverein, a gcc-16.1.0 könyvtárban.


