Eftir sex mánaða þróun var útgáfa LLVM 16.0 verkefnisins kynnt - GCC-samhæfð verkfærasett (þýðendur, hagræðingartæki og kóðaframleiðendur) sem safnar saman forritum í millibitakóða af RISC-líkum sýndarleiðbeiningum (lágmarks sýndarvél með hagræðingarkerfi á mörgum stigum). Hægt er að breyta gervikóðanum sem myndast með JIT þýðanda í vélaleiðbeiningar beint á þeim tíma sem forritið er keyrt.
Helstu endurbætur í Clang 16.0:
- Sjálfgefinn C++/ObjC++ staðall er gnu++17 (áður gnu++14), sem þýðir að C++17 eiginleikar með GNU viðbótum eru sjálfgefið studdir. Til að skila fyrri hegðun geturðu notað "-std=gnu++14" valkostinn.
- Innleiddir háþróaðir eiginleikar sem tengjast C++20 staðlinum:
- Skilyrt léttvæg sérstakar meðlimaaðgerðir,
- fanga skipulagðar bindingar í lambda aðgerðum,
- Jafnréttistæki inni í tjáningum,
- Valkostur til að sleppa tegundarheiti leitarorði í sumum samhengi,
- Gild uppsöfnuð frumstilling innan sviga ("Aggr(val1, val2)").
- Eiginleikar sem skilgreindir eru í framtíðinni C++2b staðli hafa verið innleiddir:
- Það er leyfilegt að setja merki í lok samsettra tjáninga,
- static operator(),
- truflanir [],
- Samhæfni við char8_t gerð er tryggð,
- Stafnasviðið sem leyfilegt er að nota í "\N{...}" hefur verið stækkað
- Bætti við möguleikanum á að nota breytur sem lýst er yfir sem „static constexpr“ í föllum sem lýst er yfir sem constexpr.
- Eiginleikarnir sem skilgreindir eru í framtíðinni C-staðal C2x hafa verið innleiddir:
- Til að slökkva á "-Wunused-label" viðvöruninni er heimilt að nota "[[kannski_ónotað]]" eigindina á merkimiða
- Það er leyfilegt að setja merki hvar sem er innan samsettra tjáninga,
- Bætti við gerð af og gerð_óhæfum rekstraraðila,
- Ný gerð nullptr_t og nullptr fasti til að skilgreina núllbendingar sem geta breytt í hvaða benditegund sem er og táknað afbrigði af NULL sem er ekki bundið við heiltölu og ógildar* gerðir.
- Í C2x ham er leyfilegt að kalla á va_start fjölva með breytilegum fjölda frumbreyta (variadic).
- Í C99, C11 og C17 samræmishamum, gefa sjálfgefnu valkostirnir "-Wimplicit-function-declaration" og "-Wimplicit-int" nú villu í stað viðvörunar.
- Óbein notkun á "void *" (t.d. "void func(void *p) { *p; }") í C++ ham skapar nú villu, svipað og ISO C++, GCC, ICC og MSVC.
- Að tilgreina bitasvið sem leiðbeiningaaðgerðir (t.d. "__asm{ mov eax, s.bf }") í innbyggðum samsetningarblokkum í Microsoft-stíl myndar nú villu.
- Bætt við greiningu fyrir tilvist mismunandi mannvirkja og stéttarfélaga með sömu nöfnum í mismunandi einingum.
- Möguleikarnir sem tengjast OpenCL og OpenMP stuðningi hafa verið auknir. Bætt greining fyrir C++ sniðmát sem notuð eru í OpenCL kjarnarök. Bættur stuðningur við biðraðir fyrir AMDGPU. Nafnvindareigindið er óbeint bætt við allar aðgerðir. Bættur stuðningur við innbyggðar aðgerðir.
- Bætti við möguleikanum á að nota CLANG_CRASH_DIAGNOSTICS_DIR umhverfisbreytuna til að skilgreina möppuna þar sem hrungreiningargögn eru vistuð.
- Unicode stuðningur hefur verið uppfærður í Unicode 15.0 forskriftina. Sum stærðfræðileg tákn eru leyfð í auðkennum, eins og „₊“ (t.d. „tvöfaldur xₖ₊₁“).
- Bætt við stuðningi við að hlaða upp mörgum stillingarskrám (sjálfgefin stillingarskrár eru hlaðnar fyrst og síðan þær sem tilgreindar eru með „--config=" fánanum, sem nú er hægt að tilgreina mörgum sinnum). Breytti sjálfgefna hleðsluröð stillingarskráa: clang reynir að hlaða skránni fyrst - .cfg, og ef það finnst ekki reynir það að hlaða inn tveimur skrám .cfg og .cfg. Til að slökkva á hleðslu stillingaskráa sjálfgefið hefur „--no-default-config“ fánanum verið bætt við.
- Til að tryggja endurteknar byggingar er hægt að skipta út núverandi dagsetningar- og tímagildum í __DATE__, __TIME__ og __TIMESTAMP__ fjölvunum fyrir tímann sem tilgreindur er í SOURCE_DATE_EPOCH umhverfisbreytunni.
- Til að athuga hvort innbyggðar aðgerðir (builtin) séu til staðar sem hægt er að nota í samhengi við fasta, hefur fjölvi „__has_constexpr_builtin“ verið bætt við.
- Bætt við nýju safnfána „-fcoro-aligned-allocation“ fyrir samræmda coroutine rammaúthlutun.
- „-fstrict-flex-arrays=" fáninn útfærir stuðning við þriðja stig sannprófunar á sveigjanlegum fylkisþáttum í mannvirkjum (Flexible Array Members, fylki af óákveðinni stærð í lok byggingarinnar). Á þriðja stigi er aðeins stærðin "[]" (til dæmis "int b[]") meðhöndluð sem sveigjanleg fylki, en stærðin "[0]" (til dæmis "int b[0]") er ekki.
- Bætt við "-fmodule-output" fána til að virkja einfasa safnlíkan fyrir venjulegar C++ einingar.
- Bætt við "-Rpass-analysis=stack-frame-layout" ham til að hjálpa til við að greina vandamál með uppsetningu stafla ramma.
- Bætti við nýrri eigind __attribute__((target_version("cpu_features"))) og útvíkkaði virkni eigindarinnar __attribute__((target_clones("cpu_features1","cpu_features2",...))) til að velja sérstakar útgáfur af eiginleikum sem AArch64 býður upp á. örgjörva.
- Greiningartæki stækkað:
- Bætt við viðvörun "-Wsingle-bit-bitfield-constant-conversion" til að greina óbeina styttingu þegar einum bita er úthlutað til einbita undirritaðs bitasviðs.
- Greining óinitialdra constexpr breyta hefur verið stækkuð.
- Bætt við "-Wcast-function-type-strict" og "-Wincompatible-function-pointer-types-strict" viðvaranir til að bera kennsl á hugsanleg vandamál við steypu aðgerðategunda.
- Bætt við greiningu til að nota röng eða frátekin einingaheiti í útflutningsblokkum.
- Bætt uppgötvun á „sjálfvirk“ leitarorðum sem vantar í skilgreiningum.
- Innleiðing á viðvöruninni „-Winteger-overflow“ hefur bætt við eftirliti fyrir frekari aðstæður sem leiða til yfirfalls.
- Innleiddi stuðning fyrir LoongArch leiðbeiningasett arkitektúr (-march=loongarch64 eða -march=la464), notaður í Loongson 3 5000 örgjörvum og innleiðir nýja RISC ISA, svipað og MIPS og RISC-V.
Helstu nýjungar í LLVM 16.0:
- LLVM kóða er heimilt að nota þætti sem eru skilgreindir í C++17 staðlinum.
- Umhverfiskröfur fyrir byggingu LLVM hafa verið auknar. Byggingartækin ættu nú að styðja C++17 staðalinn, þ.e. Til að byggja þarftu að minnsta kosti GCC 7.1, Clang 5.0, Apple Clang 10.0 eða Visual Studio 2019 16.7.
- Bakendinn fyrir AArch64 arkitektúrinn bætir við stuðningi við Cortex-A715, Cortex-X3 og Neoverse V2 örgjörva, assembler fyrir RME MEC (Memory Encryption Contexts), Armv8.3 viðbætur (Complex Number) og Function Multi Versioning.
- Í bakenda fyrir ARM arkitektúrinn hefur stuðningur við Armv2, Armv2A, Armv3 og Armv3M markkerfin verið hætt, sem ekki var tryggt að búa til réttan kóða fyrir. Bætti við möguleikanum á að búa til kóða fyrir leiðbeiningar um að vinna með flóknar tölur.
- Bakendinn fyrir X86 arkitektúrinn hefur bætt við stuðningi við kennslusettaarkitektúr (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Bætti við stuðningi við RDMSRLIST, RMSRLIST og WRMSRNS leiðbeiningar. Innleiddir valkostir "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" og "-mcpu=grandridge".
- Bætti við opinberum stuðningi við LoongArch vettvang.
- Bættur stuðningur fyrir MIPS, PowerPC og RISC-V arkitektúr
- Bætti við stuðningi við að kemba 64 bita keyrslu fyrir LoongArch arkitektúrinn við LLDB kembiforritið. Bætt meðhöndlun COFF villuleitartákna. Veitt síun á afrit DLLs á listanum yfir hlaðnar Windows einingar.
- Í Libc++ bókasafninu var meginvinnan lögð áhersla á að innleiða stuðning við nýja eiginleika C++20 og C++23 staðlanna.
- LDD tengillinn dregur verulega úr tengingartíma með því að samsíða skönnun á vistfangaflutningi og frumstillingaraðgerðum hluta. Bætti við stuðningi við þjöppun hluta með ZSTD reikniritinu.
Heimild: opennet.ru