LLVM 16.0 kompilaatorite komplekti vÀljaanne

PĂ€rast kuu aega kestnud arendust on vĂ€lja antud LLVM 16.0 versioon — GCC-iga ĂŒhilduv tööriistakomplekt (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerib programme RISC-sarnaste virtuaalsete kĂ€skluste vahepealseks binaarkoodiks (madalama taseme virtuaalmasin, millel on mitme taseme optimeerimisĂŒsteem). Genereritud pseudokood vĂ”ib JIT-kompilaatori abil olla muudetud masiinakĂ€sklusteks otse programmi kĂ€ivitamise hetkel.

Clang 16.0 peamised uuendused:

  • Vaikimisi kasutatav C++/ObjC++ standard on seatud gnu++17 (varem kasutati gnu++14), mis tĂ€hendab C++17 vĂ”imaluste vaikimisi toetust koos GNU laiendustega. Varasema kĂ€itumise taastamiseks saab kasutada valikut "-std=gnu++14".
  • On rakendatud laiendatud vĂ”imalusi, mis on seotud C++20 standardiga:
    • Tingimuslikult triviaalsete erifunktsioonide liikmed,
    • Struktureeritud sidemete toimetalitamine lambdafunktsioonides,
    • VĂ”rdlusoperaator vĂ€ljendites,
    • VĂ”imalus jĂ€tma sĂ”na typename mĂ”nedes kontekstides vĂ€lja,
    • Ahi initiaalimine sulgudes ("Aggr(val1, val2)").
  • Tulevases C++2b standardis mÀÀratletud funktsioonid on rakendatud:
    • Sildide paigutamine komposiitvĂ€ljendite lĂ”pus on lubatud,
    • static operator(),
    • static operator[],
    • Tagatud on ĂŒhilduvus char8_t tĂŒĂŒbiga,
    • Kasutamiseks lubatud sĂŒmbolite ulatus «\N{
}» on laienenud,
    • Lisatud on vĂ”imalus kasutada «static constexpr» kui muutujaid, funktsioonides, mis on mÀÀratletud kui constexpr.
  • Tulevase C-keele standardi C2x mÀÀratud funktsioonid on rakendatud:
    • Et hoiatust «-Wunused-label» vĂ€lja lĂŒlitada, on lubatud rakendada atribuuti «[[maybe_unused]]» siltidele,
    • Sildide paigutamine on lubatud igas kohas komposiitvĂ€ljendite sees,
    • Lisatud on operaatorid typeof ja typeof_unqual,
    • Uus tĂŒĂŒp nullptr_t ja konstandid nullptr nullviidete mÀÀratlemiseks, mida saab konvertida igasse viidete tĂŒĂŒpi ja esindada variant NULL, mis ei ole seotud tĂ€isarvude tĂŒĂŒpidega ega tĂŒhja tĂŒĂŒbi void*.
    • C2x-reĆŸiimis on lubatud kutsuda vahemakrosid va_start muutuva argumendihulga (variadic) puhul.
  • Standardite C99, C11 ja C17 vastavusreĆŸiimides toovad valikud «-Wimplicit-function-declaration» ja «-Wimplicit-int» nĂŒĂŒd vaikimisi vĂ€lja vea, mitte hoiatusi.
  • C++ reĆŸiimiga „void *“ kaudne kasutamine (nĂ€iteks „void func(void *p) { *p; }“) toob nĂŒĂŒd kaasa vea genereerimise, sarnaselt ISO C++, GCC, ICC ja MSVC-ga.
  • BitivĂ€ljade nĂ€itamine kĂ€su operandidena (nĂ€iteks „__asm { mov eax, s.bf }“) Microsofti stiilis sisseehitatud plokkides toob nĂŒĂŒd kaasa vea genereerimise.
  • Lisatud diagnostika erinevate struktuuride ja liideste tuvastamiseks, millel on samad nimed erinevates moodulites.
  • Avardatud OpenCL ja OpenMP toe seotud vĂ”imalusi. Parandatud C++ mallide diagnostikat, mida kasutatakse OpenCL tuumargumentides. Parandatud asenduste blokeeringu tuge AMDGPU jaoks. KĂ”igile funktsioonidele on varjatult lisatud nounwind atribuut. Parandatud sissetehitatud funktsioonide tuge.
  • Lisatud vĂ”imalus kasutada keskkonnamuutujat CLANG_CRASH_DIAGNOSTICS_DIR diagnostikateabe katalooge mÀÀramiseks, kuhu salvestatakse avariide diagnostilised andmed.
  • Unicode tugi on ajakohastatud Unicode 15.0 spetsifikatsioonini. Lubatud on teatud matemaatiliste sĂŒmbolite kasutamine identifikaatorites, nagu „₊“ (nĂ€iteks „double xₖ₊₁“).
  • Lisatud tugi mitme konfiguratsioonifaili ĂŒleslaadimiseks (esmajĂ€rjekorras laaditakse vaikimisi konfiguratsioonifailid ja seejĂ€rel need, mis on mÀÀratud lippu «—config=» kaudu, mida nĂŒĂŒd saab mÀÀrata mitu korda). Vaikimisi konfiguratsioonifailide laadimise jĂ€rjekord on muudetud: clang proovib esmalt laadida faili -.cfg, ja kui see ei ole leitud, proovib laadida kahte faili .cfg ja .cfg. Vaikimisi konfiguratsioonifailide laadimise keelamiseks on lisatud lipp «—no-default-config».
  • Korduvate koostamiste tagamiseks on lisatud vĂ”imalus asendada praeguse kuupĂ€eva ja kellaaja vÀÀrtusi makros __DATE__, __TIME__ ja __TIMESTAMP__ keskkonnamuutuja SOURCE_DATE_EPOCH mÀÀratud ajaga.
  • Sisseehitatud funktsioonide (builtin) olemasolu kontrollimiseks, mis vĂ”ivad olla kasutusel konstandikontekstis, on lisatud makro «__has_constexpr_builtin».
  • Uus kompileerimisflag «-fcoro-aligned-allocation» on lisatud kohandatud jaotuste koostööfunktsioonide jaoks.
  • Lipukes „-fstrict-flex-arrays=” vĂ”imaldab toetada kolmanda taseme kontrolli paindlikel massiivielementidel struktuurides (paindlikud massiiviliikmed, mÀÀratlemata suurusega massiiv struktuuri lĂ”pus). Kolmandal tasemel töödeldakse ainult suurust „[]” (nt „int b[]”) kui paindlikku massiivi, kui suurust „[0]” (nt „int b[0]”) ei kĂ€sitleta sellisena.
  • Lisatud lipp „-fmodule-output”, et aktiveerida ĂŒhefaasiline C++ standardmodulite kompileerimise mudel.
  • Lisatud reĆŸiim „-Rpass-analysis=stack-frame-layout”, mis vĂ”imaldab tuvastada probleemide korral virnastamisraamide paigutuses.
  • Lisatud uus atribuut __attribute__((target_version(„cpu_features”))) ning laiendatud atribuudi __attribute__((target_clones(„cpu_features1”, „cpu_features2”,
))) funktsionaalsust, et valida AArch64 CPU pakutud teatud funktsiooniversioonid.
  • Diagnostikavahendeid on laiendatud:
    • Lisatud hoiatust „-Wsingle-bit-bitfield-constant-conversion” ĂŒhebitise tĂ€hendusvĂ€lja vÀÀrtuse mÀÀramise ajal toimuvate varjatud kĂ€rpimiste tuvastamiseks.
    • Laiendatud mitteinitsialiseeritud constexpr-muutujate diagnostikat.
    • Lisatud hoiatust „-Wcast-function-type-strict” ja „-Wincompatible-function-pointer-types-strict” funktsioonitĂŒĂŒbi omaduste ĂŒlekandmise vĂ”imalike probleemide kindlakstegemiseks.
    • Lisatud diagnoosimine ebaĂ”igete vĂ”i reserveeritud moodulite nimede kasutamise jaoks eksportblokkides.
    • Parandatud «auto» mĂ€rksĂ”nade leidmise puudujÀÀgi tuvastamine mÀÀratlustes.
    • Winteger-overflow hoiatuse rakenduses on lisatud tĂ€iendavad olukordade kontrollid, mis viivad ĂŒlekoormusteni.
  • Toetatakse LoongArch kĂ€su komplekti arhitektuuri (-march=loongarch64 vĂ”i -march=la464), mis on kasutusel Loongson 3 5000 protsessorites ning rakendab uut RISC ISA, mis sarnaneb MIPS ja RISC-V-ga.

LLVM 16.0 peamised uuendused:

  • LLVM koodis on lubatud kasutada C++17 standardis defineeritud elemente.
  • LLVM koostamisese nĂ”uded on tĂ”usnud. Koostamisriistvara peab nĂŒĂŒd toetama C++17 standardit, st koostamiseks on vajalik vĂ€hemalt GCC 7.1, Clang 5.0, Apple Clang 10.0 vĂ”i Visual Studio 2019 16.7.
  • AArch64 arhitektuuri taustale on lisatud tugi CPU-dele Cortex-A715, Cortex-X3 ja Neoverse V2, assembler RME MEC (MĂ€lu KrĂŒpteerimise Kontekstid), Armv8.3 laiendused (Kompleksarv) ja mitme versiooni toetamine (Funktsiooni mitme versiooni tugi).
  • ARM arhitektuuri tagaplaanil lĂ”petati Armv2, Armv2A, Armv3 ja Armv3M sihtplatvormide tugi, mille puhul ei saanud koodi korrektset genereerimist garanteerida. Lisatud on vĂ”imalus genereerida koodi komplekssete arvudega töötamise kĂ€skluste jaoks.
  • X86 arhitektuuri tagaplaanile on lisatud toed kĂ€sukogude (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Lisatud on RDMSRLIST, RMSRLIST ja WRMSRNS kĂ€sud. Teostatud on valikud «-mcpu=raptorlake», «-mcpu=meteorlake», «-mcpu=emeraldrapids», «-mcpu=sierraforest», «-mcpu=graniterapids» ja «-mcpu=grandridge».
  • LoongArch platvormi ametlik tugi on lisatud.
  • MIPS, PowerPC ja RISC-V arhitektuuride tagaplaanid on parendatud.
  • LLDB silurehasse on lisatud 64-bitiste tĂ€idesaatvate failide silumise tugi LoongArch arhitektuurile. Parendatud on COFF silumis sĂŒmbolite töötlemist. Tagatud on DLLide dubleerimise filtrimine Windowsi moodulite laadimisnimekirjas.
  • Libc++ raamatukogus on peamine töö keskendunud C++20 ja C++23 standardite uute vĂ”imaluste toe rakendamisele.
  • LDD komponeerijas on skaneerimise aadresside liikumiste ja sektsioonide initsialiseerimise operatsioonide paralleelsetes töötlemistes oluliselt aega kokku hoitud. Lisatud on toetust sektsioonide tihendamiseks ZSTD algoritmi kasutamisega.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster