PÄc seÅ”u mÄneÅ”u izstrÄdes tika prezentÄts LLVM 16.0 projekta izlaidums - ar GCC saderÄ«gs rÄ«ku komplekts (kompilatori, optimizÄtÄji un kodu Ä£eneratori), kas apkopo programmas RISC lÄ«dzÄ«gu virtuÄlo instrukciju starpposma bitkodÄ (zema lÄ«meÅa virtuÄlÄ maŔīna ar daudzlÄ«meÅu optimizÄcijas sistÄma). Ä¢enerÄto pseidokodu, izmantojot JIT kompilatoru, var pÄrvÄrst maŔīnas instrukcijÄs tieÅ”i programmas izpildes laikÄ.
Galvenie Clang 16.0 uzlabojumi:
- NoklusÄjuma C++/ObjC++ standarts ir gnu++17 (iepriekÅ” gnu++14), kas nozÄ«mÄ, ka C++17 lÄ«dzekļi ar GNU paplaÅ”inÄjumiem tiek atbalstÄ«ti pÄc noklusÄjuma. Lai atgrieztu iepriekÅ”Äjo darbÄ«bu, varat izmantot opciju "-std=gnu++14".
- Ieviestas uzlabotas funkcijas, kas saistītas ar C++20 standartu:
- NosacÄ«ti triviÄlas Ä«paÅ”Äs biedru funkcijas,
- strukturÄtu saiÅ”u uztverÅ”ana lambda funkcijÄs,
- VienlÄ«dzÄ«bas operators izteiksmÄs,
- IespÄja dažos kontekstos izlaist tipa nosaukuma atslÄgvÄrdu,
- DerÄ«ga apkopotÄ inicializÄcija iekavÄs (āAggr(val1, val2)ā).
- Ir ieviestas nÄkotnes C++2b standartÄ definÄtÄs funkcijas:
- Salikto izteiksmju beigÄs ir atļauts ievietot etiÄ·etes,
- statiskais operators (),
- statiskais operators[],
- tiek nodroÅ”inÄta savietojamÄ«ba ar char8_t tipu,
- RakstzÄ«mju diapazons, ko atļauts izmantot mapÄ "\N{...}", ir paplaÅ”inÄts
- Pievienota iespÄja izmantot mainÄ«gos, kas deklarÄti kÄ "static constexpr" funkcijÄs, kas deklarÄtas kÄ constexpr.
- Ir ieviestas nÄkotnes C-standarta C2x funkcijas:
- Lai atspÄjotu brÄ«dinÄjumu "-Wunused-label", etiÄ·etÄm ir atļauts lietot atribÅ«tu "[[maybe_unused]]".
- Ir atļauts izvietot etiÄ·etes jebkur saliktÄs izteiksmÄs,
- Pievienots operatoru typeof un typeof_unqual,
- Jauns tips nullptr_t un nullptr konstante, lai definÄtu nulles norÄdes, kuras var pÄrveidot par jebkuru rÄdÄ«tÄja veidu un attÄlot NULL variantu, kas nav saistÄ«ts ar veseliem skaitļiem un nederÄ«giem* veidiem.
- C2x režīmÄ ir atļauts izsaukt makro va_start ar mainÄ«gu argumentu skaitu (variadic).
- C99, C11 un C17 atbilstÄ«bas režīmos noklusÄjuma opcijas "-Wimplicit-function-declaration" un "-Wimplicit-int" tagad rada kļūdu, nevis brÄ«dinÄjumu.
- NetieÅ”a "void *" (piemÄram, "void func(void *p) { *p; }") izmantoÅ”ana C++ režīmÄ tagad rada kļūdu, kas ir lÄ«dzÄ«ga ISO C++, GCC, ICC un MSVC.
- NorÄdot bitu laukus kÄ instrukciju operandus (piemÄram, "__asm āāāā{ mov eax, s.bf }") Microsoft stila iekļautajos montÄžas blokos tagad tiek Ä£enerÄta kļūda.
- Pievienota diagnostika dažÄdu struktÅ«ru un savienÄ«bu klÄtbÅ«tnei ar vienÄdiem nosaukumiem dažÄdos moduļos.
- Ar OpenCL un OpenMP atbalstu saistÄ«tÄs iespÄjas ir paplaÅ”inÄtas. Uzlabota diagnostika C++ veidnÄm, ko izmanto OpenCL kodola argumentos. Uzlabots rindu bloku atbalsts AMDGPU. AtribÅ«ts nounwind ir netieÅ”i pievienots visÄm funkcijÄm. Uzlabots atbalsts iebÅ«vÄtajÄm funkcijÄm.
- Pievienota iespÄja izmantot vides mainÄ«go CLANG_CRASH_DIAGNOSTICS_DIR, lai definÄtu direktoriju, kurÄ tiek saglabÄti avÄriju diagnostikas dati.
- Unikoda atbalsts ir atjauninÄts atbilstoÅ”i Unicode 15.0 specifikÄcijai. Identifikatoros ir atļauti daži matemÄtiski simboli, piemÄram, āāā (piemÄram, ādouble xāāāā).
- Pievienots atbalsts vairÄku konfigurÄcijas failu ielÄdei (vispirms tiek ielÄdÄti noklusÄjuma konfigurÄcijas faili, pÄc tam tie, kas norÄdÄ«ti ar karogu ā--config=ā, ko tagad var norÄdÄ«t vairÄkas reizes). MainÄ«ta konfigurÄcijas failu noklusÄjuma ielÄdes secÄ«ba: clang vispirms mÄÄ£ina ielÄdÄt failu - .cfg, un, ja tas netiek atrasts, tas mÄÄ£ina ielÄdÄt divus failus .cfg un .cfg. Lai pÄc noklusÄjuma atspÄjotu konfigurÄcijas failu ielÄdi, ir pievienots karodziÅÅ” ā--no-default-configā.
- Lai nodroÅ”inÄtu atkÄrtojamu bÅ«vÄjumu, paÅ”reizÄjÄs datuma un laika vÄrtÄ«bas makro __DATE__, __TIME__ un __TIMESTAMP__ ir iespÄjams aizstÄt ar laiku, kas norÄdÄ«ts vides mainÄ«gajÄ SOURCE_DATE_EPOCH.
- Lai pÄrbaudÄ«tu, vai ir iebÅ«vÄtas funkcijas (builtin), kuras var izmantot konstantu kontekstÄ, ir pievienots makro ā__has_constexpr_builtinā.
- Pievienots jauns kompilÄcijas karodziÅÅ” "-fcoro-aligned-allocation" saskaÅotai korutÄ«nas kadru pieŔķirÅ”anai.
- Karogs ā-fstrict-flex-arrays=ā ievieÅ” atbalstu treÅ”ajam elastÄ«go masÄ«vu elementu verifikÄcijas lÄ«menim struktÅ«rÄs (Flexible Array Members, nenoteikta izmÄra masÄ«vs struktÅ«ras beigÄs). TreÅ”ajÄ lÄ«menÄ« tikai izmÄrs "[]" (piemÄram, "int b[]") tiek uzskatÄ«ts par elastÄ«gu masÄ«vu, bet izmÄrs "[0]" (piemÄram, "int b[0]") nav.
- Pievienots karodziÅÅ” "-fmodule-output", lai iespÄjotu vienfÄzes kompilÄcijas modeli standarta C++ moduļiem.
- Pievienots režīms "-Rpass-analysis=stack-frame-layout", lai palÄ«dzÄtu diagnosticÄt steka rÄmja izkÄrtojuma problÄmas.
- Pievienots jauns atribÅ«ts __attribute__((target_version("cpu_features"))) un paplaÅ”inÄta atribÅ«ta __attribute__((target_clones("cpu_features1","cpu_features2",...))) funkcionalitÄte, lai atlasÄ«tu konkrÄtas AArch64 nodroÅ”inÄto lÄ«dzekļu versijas CPU.
- Diagnostikas rÄ«ki ir paplaÅ”inÄti:
- Pievienots brÄ«dinÄjums "-Wsingle-bit-bitfield-constant-conversion", lai noteiktu netieÅ”u saÄ«sinÄÅ”anu, pieŔķirot to viena bita parakstÄ«tam bitlaukam.
- Ir paplaÅ”inÄta neinicializÄto constexpr mainÄ«go diagnostika.
- Pievienoti brÄ«dinÄjumi "-Wcast-function-type-strict" un "-Wincompatible-function-pointer-types-strict", lai identificÄtu iespÄjamÄs problÄmas ar funkciju tipa apraidi.
- Pievienota diagnostika nepareizu vai rezervÄtu moduļu nosaukumu izmantoÅ”anai eksporta blokos.
- Uzlabota trÅ«kstoÅ”o "automÄtisko" atslÄgvÄrdu noteikÅ”ana definÄ«cijÄs.
- BrÄ«dinÄjuma "-Winteger-overflow" ievieÅ”ana ir papildinÄjusi papildu situÄcijas, kas izraisa pÄrpildes.
- Ieviests atbalsts LoongArch instrukciju kopas arhitektÅ«rai (-march=loongarch64 vai -march=la464), ko izmanto Loongson 3 5000 procesoros un ievieÅ” jauno RISC ISA, lÄ«dzÄ«gi kÄ MIPS un RISC-V.
Galvenie jauninÄjumi LLVM 16.0:
- LLVM kodÄ ir atļauts izmantot C++17 standartÄ definÄtos elementus.
- PaaugstinÄtas vides prasÄ«bas LLVM celtniecÄ«bai. VeidoÅ”anas rÄ«kiem tagad vajadzÄtu atbalstÄ«t C++17 standartu, t.i. Lai izveidotu, jums ir nepiecieÅ”ams vismaz GCC 7.1, Clang 5.0, Apple Clang 10.0 vai Visual Studio 2019 16.7.
- AArch64 arhitektÅ«ras aizmugure nodroÅ”ina atbalstu Cortex-A715, Cortex-X3 un Neoverse V2 centrÄlajiem procesoriem, RME MEC (atmiÅas Å”ifrÄÅ”anas kontekstu) montÄtÄjam, Armv8.3 paplaÅ”inÄjumiem (kompleksais numurs) un funkciju vairÄku versiju izveidei.
- ARM arhitektÅ«ras aizmugursistÄmÄ ir pÄrtraukts Armv2, Armv2A, Armv3 un Armv3M mÄrÄ·a platformu atbalsts, kurÄm pareiza koda Ä£enerÄÅ”ana netika garantÄta. Pievienota iespÄja Ä£enerÄt kodu instrukcijÄm darbam ar kompleksajiem skaitļiem.
- X86 arhitektÅ«ras aizmugursistÄmai ir pievienots atbalsts instrukciju kopu arhitektÅ«rÄm (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Pievienots atbalsts RDMSRLIST, RMSRLIST un WRMSRNS instrukcijÄm. IeviestÄs opcijas "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" un "-mcpu=grandridge".
- Pievienots oficiÄlais atbalsts platformai LoongArch.
- Uzlabotas aizmugursistÄmas MIPS, PowerPC un RISC-V arhitektÅ«rÄm
- Pievienots atbalsts 64 bitu izpildÄmo failu atkļūdoÅ”anai LoongArch arhitektÅ«rai LLDB atkļūdotÄjam. Uzlabota COFF atkļūdoÅ”anas simbolu apstrÄde. NodroÅ”inÄta dublÄto DLL filtrÄÅ”ana ielÄdÄto Windows moduļu sarakstÄ.
- Libc++ bibliotÄkÄ galvenais darbs tika vÄrsts uz C++20 un C++23 standartu jauno funkciju atbalsta ievieÅ”anu.
- LDD saistÄ«tÄjs ievÄrojami samazina saistÄ«Å”anas laiku, paralÄli veicot adreses pÄrvietoÅ”anas skenÄÅ”anu un sadaļu inicializÄcijas darbÄ«bas. Pievienots atbalsts sadaļu saspieÅ”anai, izmantojot ZSTD algoritmu.
Avots: opennet.ru