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
