LLVM 13.0 kompiliatoriaus rinkinio išleidimas

Po šešių mėnesių kūrimo buvo pristatytas LLVM 13.0 projekto leidimas – su GCC suderinamas įrankių rinkinys (kompiliatoriai, optimizatoriai ir kodų generatoriai), kuris programas kompiliuoja į tarpinį RISC tipo virtualių komandų bitų kodą (žemo lygio virtuali mašina su kelių lygių optimizavimo sistema). Sukurtas pseudokodas gali būti konvertuojamas naudojant JIT kompiliatorių į mašinos komandas tiesiogiai programos vykdymo metu.

„Clang 13.0“ patobulinimai:

  • Įdiegtas garantuotų uodegos iškvietimų palaikymas (paprogramės iškvietimas pačioje funkcijos pabaigoje, uodegos rekursijos formavimas, jei paprogramė išsikviečia pati). Garantuotų uodegos skambučių palaikymą teikia atributas „[[clang::musttail]]“ C++ ir „__attribute__((musttail))“ C, naudojamas sakinyje „return“. Ši funkcija leidžia įgyvendinti optimizavimą įdiegiant kodą į vienodą iteraciją, kad sutaupytumėte dėklo suvartojimą.
  • „Naudojant“ deklaracijas ir „clang“ plėtinius palaikoma C++11 stiliaus atributų apibrėžimas naudojant „[[]]“ formatą.
  • Pridėta vėliavėlė „-Rezervuotas identifikatorius“, kad būtų rodomas įspėjimas, kai vartotojo kode nurodote rezervuotus identifikatorius.
  • Pridėtos vėliavėlės „-Wunused-but-set-parameter“ ir „-Wunused-but-set-variable“, kad būtų rodomas įspėjimas, jei parametras arba kintamasis nustatytas, bet nenaudojamas.
  • Pridėta vėliavėlė „-Null-pointer-subtraction“, kad būtų pateiktas įspėjimas, jei kodas gali sukelti neapibrėžtą elgesį dėl nulinės rodyklės naudojimo atimties operacijose.
  • Pridėta vėliavėlė „-fstack-usage“, kad kiekvienam kodo failui būtų sukurtas papildomas „.su“ failas, kuriame yra informacija apie dėklo kadrų dydį kiekvienai apdorojamame faile apibrėžtai funkcijai.
  • Prie statinio analizatoriaus buvo pridėtas naujas išvesties tipas - „sarif-html“, kuris leidžia vienu metu generuoti ataskaitas HTML ir Sarif formatais. Pridėtas naujas „allocClassWithName“ patikrinimas. Nurodžius parinktį „-analyzer-display-progress“, rodomas kiekvienos funkcijos analizės laikas. Išmanusis rodyklės analizatorius (alpha.cplusplus.SmartPtr) beveik paruoštas.
  • Su OpenCL palaikymu susijusios galimybės buvo išplėstos. Pridėtas naujų plėtinių cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ir __cl_clang_non_portable_kernel_param_types palaikymas. Tęsiamas OpenCL 3.0 specifikacijos diegimas. C pagal nutylėjimą naudojama OpenCL 1.2 specifikacija, nebent aiškiai pasirinkta kita versija. Naudojant C++, buvo pridėtas failų su plėtiniu „.clcpp“ palaikymas.
  • Įdiegtas OpenMP 5.1 specifikacijoje apibrėžtų ciklo transformavimo direktyvų („#pragma omp unrol“ ir „#pragma omp tile“) palaikymas.
  • Pridėtos parinktys į clang formato įrankį: SpacesInLineCommentPrefix, kad apibrėžtų tarpų skaičių prieš komentarus, IndentAccessModifiers, LambdaBodyIndentation ir PPIndentWidth, kad valdytų įrašų, lambda išraiškų ir išankstinio procesoriaus direktyvų lygiavimą. Išplėstos antraštės failų sąrašo (SortIncludes) rūšiavimo galimybės. Pridėtas JSON failų formatavimo palaikymas.
  • Didelė dalis naujų čekių buvo pridėta, kad tarpvėžė būtų tvarkinga.

Pagrindinės LLVM 13.0 naujovės:

  • Pridėta parinktis „-ehcontguard“, kad būtų naudojama CET („Windows Control-flow Enforcement Technology“) technologija, apsauganti nuo išnaudojimų, sukurtų naudojant grąžinimo orientuoto programavimo (ROP) metodus, vykdymo išimčių tvarkymo etape.
  • Debuginfo-test projektas buvo pervadintas į kryžminių projektų testus ir skirtas įvairių projektų komponentams išbandyti, neapsiribojant derinimo informacija.
  • Surinkimo sistema palaiko kelių paskirstymų kūrimą, pavyzdžiui, vieną su komunalinėmis paslaugomis, o kitą su bibliotekomis kūrėjams.
  • AArch64 architektūros užpakalinėje programoje montuotojas įdiegtas Armv9-A RME (Realm Management Extension) ir SME (Scalable Matrix Extension) plėtinių palaikymas.
  • ISA V68/HVX palaikymas buvo įtrauktas į šešiakampės architektūros užpakalinę dalį.
  • x86 backend patobulino AMD Zen 3 procesorių palaikymą.
  • Pridėtas GFX1013 RDNA2 APU palaikymas prie AMDGPU sistemos.
  • „Libc++“ toliau diegia naujas C++20 ir C++2b standartų funkcijas, įskaitant „koncepcijų“ bibliotekos užbaigimą. Pridėtas std::failų sistemos palaikymas MinGW pagrindu veikiančiai Windows platformai. Antraštės failai , ir yra atskirti. Pridėta kūrimo parinktis LIBCXX_ENABLE_INCOMPLETE_FEATURES, kad išjungtumėte antraštės failus, kurių funkcijos nėra visiškai įdiegtos.
  • Išplėtotos LLD linkerio galimybės, kurioje įdiegtas Big-endian Aarch64 procesorių palaikymas, o Mach-O backend atvestas į būseną, leidžiančią susieti įprastas programas. Įtraukti patobulinimai, reikalingi norint susieti Glibc naudojant LLD.
  • Priemonė „llvm-mca“ (mašininio kodo analizatorius) pridėjo palaikymą procesoriams, kurie vykdo instrukcijas eilės tvarka (superskaliarinis konvejeris), pvz., ARM Cortex-A55.
  • LLDB derinimo priemonė, skirta AArch64 platformai, užtikrina visišką rodyklės autentifikavimo, MTE (MemTag, Memory Tagging Extension) ir SVE registrų palaikymą. Pridėtos komandos, leidžiančios susieti žymes prie kiekvienos atminties paskirstymo operacijos ir organizuoti žymeklio patikrinimą, kai pasiekiate atmintį, kuri turi būti susieta su teisinga žyma.
  • LLDB derinimo priemonė ir Fortran kalbos sąsaja - Flang buvo pridėta prie projekto sugeneruotų dvejetainių rinkinių.

Šaltinis: opennet.ru

Добавить комментарий