Sei hilabeteko garapenaren ondoren, LLVM 16.0 proiektuaren oharra aurkezten da: GCC-rekin bateragarria den tresna-kit bat (konpilatzaileak, optimizatzaileak eta kode-sorgailuak) programak RISC moduko instrukzio birtualen bitarteko bitkode batean konpilatzen dituena (maila baxuko makina birtuala duena). maila anitzeko optimizazio sistema). Sortutako sasi-kodea JIT konpilatzaileak makinaren instrukzioetan bihur dezake programa exekutatzen den unean bertan.
Hobekuntza nagusiak Clang 16.0-n:
- C++/ObjC++ estandar lehenetsia gnu++17 gisa ezarrita dago (lehen gnu++14), eta horrek C++17 funtzioetarako onartzen du lehenespenez GNU luzapenekin. "-std=gnu++14" aukera erabil dezakezu aurreko portaera itzultzeko.
- C++20 estandarrari lotutako funtzio aurreratuak inplementatu dira:
- Kideen funtzio berezi baldintza hutsalak,
- lambda funtzioetan lotura egituratuak harrapatzea,
- Adierazpen barruko berdintasun-operatzailea,
- Testuinguru batzuetan typename gako-hitza ez zehazteko gaitasuna,
- Parentesi artean agregatuaren hasierako baimena ("Aggr(val1, val2)").
- Etorkizuneko C++2b estandarrean definitutako ezaugarriak inplementatuak:
- Adierazpen konposatuen amaieran etiketak onartzen dira,
- operadore estatikoa(),
- operadore estatikoa[],
- Char8_t motarekin bateragarritasuna ematen du,
- "\N{...}"-n erabiltzeko baimendutako karaktere sorta zabaldu da,
- "Constexpr estatikoa" gisa deklaratutako aldagaiak erabiltzeko gaitasuna gehitu da constexpr gisa deklaratutako funtzioetan.
- Etorkizuneko C2x C estandarrean definitutako ezaugarriak:
- "-Wunused-label" abisua desgaitzeko, "[[agian_unused]]" atributua aplika dakioke etiketei
- Etiketak edozein lekutan jar daitezke adierazpen konposatuen barruan,
- Typeof eta typeof_unqual operadoreak gehitu dira,
- Nullptr_t mota berri bat eta nullptr konstante bat edozein erakusle motatara bihur daitezkeen erakusle nuluak definitzeko eta integral mota eta void*-ekin lotuta ez dagoen NULL-ren aldaera bat irudikatzeko.
- C2x moduan, va_start makroari argumentu-kopuru aldakorreko (variadic) deitzea onartzen da.
- C99, C11 eta C17 adostasun-moduetan, "-Wimplicit-function-declaration" eta "-Wimplicit-int" aukerek orain errore bat sortzen dute abisu baten ordez lehenespenez.
- C++ moduan "void *" (adibidez, "void func(void *p) { *p; }") zeharkako erabilerak errore bat sortzen du orain, ISO C++, GCC, ICC eta MSVC-ren antzekoa.
- Bit-eremuak instrukzio-eragile gisa zehazteak (adibidez, "__asm ββββ{ mov eax, s.bf }") Microsoft-en estiloko lerroko muntaketa-blokeetan orain errore bat sortzen du.
- Modulu ezberdinetan izen berdinak dituzten egitura eta batasun desberdinak egotearen diagnostikoak gehitu dira.
- OpenCL eta OpenMP-ren laguntzarekin lotutako gaitasun hedatuak. OpenCL nukleoaren argumentuetan erabilitako C++ txantiloien diagnostiko hobetua. AMDGPUren ilaran blokeatzeko laguntza hobetua. Nounwind atributua inplizituki gehitzen da funtzio guztietan. Funtzio integratuetarako laguntza hobetua.
- CLANG_CRASH_DIAGNOSTICS_DIR ingurune-aldagaia erabiltzeko gaitasuna eman du hutsegiteen diagnostiko-datuak gordetzen diren direktorioa definitzeko.
- Unicode laguntza Unicode 15.0 zehaztapenera eguneratu da. Zenbait ikur matematiko onartzen dira identifikatzaileetan, hala nola "β" (adibidez, "xβββ bikoitza").
- Hainbat konfigurazio-fitxategiak kargatzeko laguntza gehitu da (lehenengo konfigurazio-fitxategiak kargatzen dira, eta gero "--config=" banderaren bidez zehaztutakoak, orain hainbat aldiz zehaztu daitezkeenak). Lehenetsitako konfigurazio fitxategia kargatzeko ordena aldatu da: clang-ek fitxategia lehenik kargatzen saiatzen da - .cfg eta aurkitzen ez bada bi fitxategi kargatzen saiatzen da .cfg eta .cfg. "--no-default-config" marka gehitu da konfigurazio fitxategiak kargatzea lehenespenez desgaitzeko.
- Eraikuntza errepikagarriak ziurtatzeko, __DATE__, __TIME__ eta __TIMESTAMP__ makroetako uneko data eta orduaren balioak SOURCE_DATE_EPOCH ingurune-aldagaian zehaztutako orduarekin ordezkatu daitezke.
- Konstanteen testuinguruan erabil daitezkeen funtzio integratuak (builtin) egiaztatzeko, "__has_constexpr_builtin" makroa gehitu da.
- "-fcoro-aligned-allocation" konpilazio marka berria gehitu da koroutine-markoen banaketa lerrokaturako.
- "-fstrict-flex-arrays=" banderak egituretako array-elementu malgu bat egiaztatzeko hirugarren mailarako laguntza ezartzen du (Flexible Array Members, egituraren amaieran tamaina mugagabeko array bat). Hirugarren mailan, "[]" tamaina soilik (adibidez, "int b[]") matrize malgu gisa tratatzen da, baina "[0]" tamaina (adibidez, "int b[0]"). ez da.
- "-fmodule-output" bandera gehitu da fase bakarreko konpilazio eredua C++ modulu estandarretan gaitzeko.
- "-Rpass-analysis=stack-frame-diseinua" modua gehitu da, eta horri esker, pila markoen diseinuarekin arazoak diagnostikatzen dira.
- Atributu berri bat __attribute__((target_version("cpu_features")))) gehitu da eta __attribute__((target_clones("cpu_features1β³,"cpu_features2",β¦))))) zabaldu da emandako ezaugarrien bertsio zehatzak hautatzeko. CPU AArch64-ren eskutik.
- Diagnostiko tresna hobetuak:
- "-Wsingle-bit-bitfield-constant-conversion" abisua gehitu da mozketa inplizitua detektatzeko bit bateko bit-eremu sinatutako bit-eremu bati bat esleitzeko.
- Hasieratu gabeko constexpr aldagaien diagnostiko hedatua.
- "-Wcast-function-type-strict" eta "-Wincompatible-function-pointer-types-strict" abisuak gehitu dira, funtzio motaren igorpenarekin balizko arazoak detektatzeko.
- Esportazio-blokeetan modulu-izen okerrak edo erreserbatuak erabiltzeko diagnostikoak gehitu dira.
- Definizioetan falta diren "auto" gako-hitzak hautematea hobetu da.
- "-Winteger-overflow" abisuaren ezarpenari gainezkatze-egoera gehigarrien egiaztapenak gehitu zaizkio.
- LoongArch instrukzio-multzoaren arkitekturarako (-march=loongarch64 edo -march=la464) euskarria inplementatu da Loongson 3 5000 prozesadoreetan, MIPS eta RISC-V-ren antzeko RISC ISA berri bat inplementatzen duena.
LLVM 16.0-ko berrikuntza nagusiak:
- LLVM kodean, C++17 estandarrean definitutako elementuak erabiltzea onartzen da.
- LLVM eraikitzeko ingurumen-eskakizunak areagotzea. Eraikitze-tresnak orain C++17 estandarra onartu beharko luke, hau da. eraikitzeko GCC 7.1, Clang 5.0, Apple Clang 10.0 edo Visual Studio 2019 16.7 behar ditu gutxienez.
- Cortex-A64, Cortex-X715 eta Neoverse V3 CPU, RME MEC (Memory Encryption Contexts) muntatzailea, Armv2 luzapenak (zenbaki konplexua) eta Function Multi Versioning gehitu dira AArch8.3 backend-era.
- ARM arkitektura backend-ak jada ez ditu Armv2, Armv2A, Armv3 eta Armv3M xede-plataformak onartzen, kode zuzena sortzea ez zen bermatuta. Zenbaki konplexuekin lan egiteko argibideetarako kodea sortzeko gaitasuna gehitu da.
- Instrukzio multzoen arkitekturak (ISA) AMX-FP86, CMPCXADD, AVX-IFMA, AVX-VNNI-INT16, AVX-NE-CONVERT X8 backend-en laguntza gehitu da. RDMSRLIST, RMSRLIST eta WRMSRNS argibideetarako laguntza gehitu da. "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" eta "-mcpu=grandridge" aukerak ezarri dira.
- LoongArch plataformarako laguntza ofiziala gehitu da.
- MIPS, PowerPC eta RISC-V arkitekturetarako backend hobetuak
- LoongArch arkitekturarako 64 biteko exekutagarriak arazketarako laguntza gehitu da LLDB arazteari. COFF arazketa-sinboloen kudeaketa hobetu da. Kargatutako Windows moduluen zerrendan DLL bikoiztuen iragazketa eman da.
- Libc++ liburutegian, lan nagusia C++20 eta C++23 estandarren ezaugarri berrietarako euskarria ezartzera bideratu zen.
- Lotura-denbora nabarmen murriztu da LDD estekatzailean helbideak lekualdatzeko eskaneatze eta atalaren hasierako eragiketak paralelizatuz. Sekzioen konpresioaren laguntza gehitu da ZSTD algoritmoa erabiliz.
Iturria: opennet.ru