Alig több mint hat hónapos fejlesztés után elindítása a projekt új verziója LLVM 16.0, verzió, amelyben nagyszámú változtatást és fejlesztést hajtottak végre.
Azok számára, akik nem ismerik az LLVM-et, tudniuk kell, hogy ez egy GCC-kompatibilis fordító (fordítók, optimalizálók és kódgenerátorok), amely a programokat RISC-szerű virtuális utasítás köztes bitkódba fordítja (alacsony szintű virtuális gép többszintű optimalizáló rendszerrel).
A generált pszeudokódot a JIT fordító gépi utasításokká tudja konvertálni éppen a program végrehajtása során.
Az LLVM 16.0 fő újdonságai
A bemutatott új verzióban számos fontos fejlesztést találhatunk Clang 16.0-ban, amelyek közül kiemelkedik az alapértelmezett C++/ObjC++ szabvány, amely gnu++17-re van állítva (korábban gnu++14), amely alapértelmezés szerint támogatja a C++17 funkciókat GNU kiterjesztéssel. A C++17 szabványban meghatározott elemek használata megengedett az LLVM kódban.
A másik kiemelkedő változás az, hogy hozzáadták Cortex-A715, Cortex-X3 és Neoverse CPU-k támogatása V2, Armv8.3 bővítmények és több verziójú szolgáltatások az AArch64 háttérrendszerhez.
La platform kompatibilitás Az Armv2, Armv2A, Armv3 és Armv3M gyártása megszűnt az ARM architektúra háttérrendszerében, amelyhez nem volt garantált a helyes kódgenerálás. Hozzáadtuk a kód generálásának lehetőségét a komplex számokkal való együttműködéshez, és hozzáadtuk architektúrák támogatása utasításkészletek (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT X86 háttérrendszerré.
Amellett, hogy, megemelték az LLVM építésére vonatkozó követelményeket, A buildnek ezentúl kompatibilisnek kell lennie a C++17 szabvánnyal, azaz a buildhez legalább GCC 7.1, Clang 5.0, Apple Clang 10.0 vagy Visual Studio 2019 16.7 szükséges.
Másrészt kiemeli is továbbfejlesztett háttérrendszerek MIPS, PowerPC és RISC-V architektúrákhoz, valamint a LoongArch architektúra 64 bites végrehajtható fájlok LLDB hibakeresőhöz való hibakeresésének támogatása és a COFF hibakereső szimbólumok jobb kezelése.
A többi változás közül amelyek kiemelkednek:
- A Libc++ könyvtárban a fő munka a C++20 és C++23 szabványok új funkcióinak támogatására irányult.
- A kapcsolati idő jelentősen csökkent az LDD linkerben a címáthelyezési vizsgálat és a szakasz inicializálási műveleteinek párhuzamosításával. Támogatás hozzáadva a szakasztömörítéshez a ZSTD algoritmus használatával.
- A C++20 szabvánnyal megvalósított fejlett funkciók is kiemelve.
- strukturált hivatkozások rögzítése lambda függvényekben.
- Az egyenlőség operátora a kifejezéseken belül.
- Lehetőség arra, hogy bizonyos kontextusokban ne adja meg a típusnév kulcsszót,
- A zárójelek közé adott inicializálás engedélyezése ("Aggr(érték1, érték2)").
- A jövőbeli C++2b szabványban definiált függvények megvalósítása.
- Támogatás a char8_t típussal,
- Kibővítette a "\N{…}" karakterek tartományát,
- Hozzáadtuk a „static constexpr”-ként deklarált változók használatát a constexpr-ként deklarált függvényekben.
- A jövőbeli C2x C szabványban meghatározott implementált függvények:
- Hozzáadott támogatás több konfigurációs fájl betöltéséhez (először az alapértelmezett konfigurációs fájlok töltődnek be, majd a „–config=” jelzővel megadottak, amelyek mostantól többször is megadhatók).
- Az alapértelmezett konfigurációs fájlok betöltési sorrendje megváltozott: a clang először megpróbálja betölteni a fájlt - .cfg, és ha nem találja, akkor megpróbál két fájlt betölteni .cfg és .cfg.
- Hozzáadott egy új összeállítási jelzőt "-fcoro-aligned-allocation" a rutin kerethez igazított elosztáshoz.
- Az "-fmodule-output" jelző hozzáadása lehetővé teszi a szabványos C++ modulok egyfázisú felépítési modelljét.
- A „-Rpass-analysis=stack-frame-layout” mód hozzáadva a veremkeret-elrendezéssel kapcsolatos problémák diagnosztizálásához.
- Új __attribute__((target_version("cpu_features"))) attribútum hozzáadása, és a __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) attribútum funkcióinak kiterjesztése a CPU Aarch64 által biztosított szolgáltatások adott verzióinak kiválasztásához .
- Továbbfejlesztett diagnosztikai eszközök:
- Figyelmeztetés hozzáadva a „-Wsingle-bit-bitfield-constant-conversion” implicit csonkoláshoz, amikor egy bites előjelű bitmezőhöz rendelünk.
- Kibővített diagnosztika az inicializálatlan constexpr változókhoz.
- A „-Wcast-function-type-strict” és a „-Wincompatibilis-function-pointer-types-strict” figyelmeztetések hozzáadva a függvénytípusok átküldése során felmerülő lehetséges problémák észleléséhez.
Végül Ha érdekel, hogy többet tudjon meg róla, a részleteket a következő link.