
Az LLVM egy keretrendszer a fordítók fejlesztéséhez, valamint új programozási nyelvek létrehozásához és a meglévő nyelvek fejlesztéséhez.
Hat hónap fejlesztés után Bemutatták az LLVM 17.0 új verzióját, amelyben különféle fejlesztések, változtatások, hibajavítások és mindenekelőtt különféle fontos szempontok kerültek bevezetésre a Clang 17.0-ban.
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 17.0 fő újdonságai
Az LLVM 17.0 bemutatott új verziójában számos lényeges szempontot kell figyelembe venni, amelyek közül például a fejlesztések az X86 hátterében, hát hozzátetteo bővítmények támogatása utasításkészlet architektúra ISA SHA512, ISA SM3, ISA SM4 és ISA AVX-VNNI-INT16.
Ezen kívül kiemeli még a fejlesztések ben háttérszolgáltatások az architektúrához RISC-V amelyek jelentősen bővültek, azóta hozzáadott támogatás a sifive-x280 processzorhoz.
A másik változás, amit találhatunk, az Az XTH processzor-bővítmények támogatása*, valamint a kiterjesztésekkel való kompatibilitás LSX, LASX, LVZ és LBT ISA a LoongArch architektúra hátteréhez.
Továbbfejlesztett háttérprogramok AArch64, ARM, WebAssembly, MIPS, PowerPC, AMDGPU architektúrákhoz, kibővített LLD linker képességek, és egy új "register info" paranccsal bővült az LLDB hibakereső a rekordok összes ismert információjának megjelenítéséhez.
Ami a Clang 17.0 fejlesztéseit illeti, kiemelendő, hogy a jövőbeni C-szabvány C2x-ben definiált funkciókat implementálták, mint például a bool, static_assert, aligns, alignof és thread_local kulcsszavakat, valamint az üres zárójelek «{}» megadásának lehetőségét inicializálás nulla értékre.
A kódo C lehetővé teszi a "goto" kifejezés továbbítását Az "asm" blokkon belül közvetetten kiválasztott címkéken keresztül egy C kiterjesztést adtunk hozzá, amely lehetővé teszi egy típus használatát kifejezés helyett az "_Generic" első operandusaként, amellett, hogy lehetővé teszi a C nyelvű állandó kifejezések struktúrák, uniók használatát. és a "const" attribútummal deklarált tömbök.
A C++20 szabvánnyal kapcsolatos fejlesztésekkel kapcsolatban megemlítik, hogy most A Windows kivételével minden platformon teljes mértékben támogatott a Coroutines, Ezenkívül további követelményeket állítottak be a konstans kifejezés-összehasonlítási műveletekhez.
Azt is kiemelik, hogy mostA lambda-sablonok helyes elemzése garantált közvetlenül a sablon paraméterei után megadva, és a blokkban egy függő típusú változót tartalmaz. Fenntartotta a dupla aláhúzás használatát a felhasználói literálokban, és nem javasolta az "operátor" kulcsszó használatát a függvénydefiníciókban, fenntartott azonosítókkal a névben
Mivel a a C++23 szabványhoz kapcsolódó fejlesztések , megemlítik, hogy az ISO általi jóváhagyás utolsó szakaszában van, mivel megváltozott a végső visszatérési típus hatóköre a lambda függvényekben hogy először a horgokat nézzük meg, majd a környező szöveget.
A egyéb változások amelyek kiemelkednek:
- Hozzáadtuk a többdimenziós tömbök meghatározásának képességét
- A "-O0" optimalizálási módot használó C++ alkalmazások fordításakor a hívások kódgenerálása javult.
- A NO_COLOR környezeti változó támogatása a kimeneti szín letiltásához.
- A statikus elemzési és diagnosztikai eszközök jelentősen bővültek, például új előjeles egész túlcsordulás-ellenőrzés, lambda-sablon korrekció, constexpr kifejezések, nullmutató összehasonlítások, inicializálatlan struktúrák használata stb.
- A Libc++ könyvtár továbbra is megvalósítja a C++20 és C++23 szabványok képességeinek támogatását, és megkezdődött a munka a C++26 specifikáció támogatására is.
- A „cplusplus23 szükséges” kifejezés támogatása a fejlécfájlok és a modulok közötti kapcsolatok leírásában.
Végül, ha többet szeretne megtudni róla, tájékozódhat a részletekről a következő link.