Útgáfa af LLVM 16.0 þýðandasvítunni

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

Bæta við athugasemd