LLVM 13.0 kompilaatorikomplekti väljalase

Pärast kuuekuulist arendustööd esitleti projekti LLVM 13.0 väljalaset – GCC-ga ühilduvat tööriistakomplekti (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerib programmid RISC-laadsete virtuaalsete käskude vahepealsesse bitikoodi (madala tasemega virtuaalmasin mitmetasandiline optimeerimissüsteem). Loodud pseudokoodi saab JIT-kompilaatori abil teisendada masinakäskudeks vahetult programmi täitmise ajal.

Clang 13.0 täiustused:

  • Nüüd on toetatud garanteeritud lõpukutsed (alamprogrammi kutsumine funktsiooni lõpus, mis loob lõpurekursiooni, kui alamprogramm ise ennast kutsub). Garanteeritud lõpukutseid toetatakse C++-s atribuudi "[[clang::mustail]]" ja C-s atribuudi "__attribute__((mustail))" abil, mida kasutatakse "return"-lauses. See funktsioon võimaldab optimeerimist, lamendades koodi tasaseks iteratsiooniks, et säästa pinuruumi.
  • C++11 stiilis atribuutide definitsioonid on nüüd toetatud clangi "kasutades" deklaratsioone ja laiendusi, kasutades vormingut "[[]]".
  • Lisatud lipp "-Wreserved-identifier", et kuvada hoiatus reserveeritud identifikaatorite määramisel kasutajakoodis.
  • Lisatud lipud "-Wunused-but-set-parameter" ja "-Wunused-but-set-variable", et kuvada hoiatus, kui parameeter või muutuja on seatud, aga mitte kasutusel.
  • Lisatud lipp "-Wnull-pointer-subtraction", mis hoiatab, kui kood võib lahutamisoperatsioonides null-pointeri kasutamise tõttu põhjustada määratlemata käitumist.
  • Lisatud lipp "-fstack-usage", et genereerida iga koodifaili jaoks täiendav ".su" fail, mis sisaldab teavet töödeldavas failis määratletud iga funktsiooni pinuraamide suuruse kohta.
  • Staatilisel analüsaatoril on uus väljundtüüp "sarif-html", mis genereerib aruandeid nii HTML- kui ka Sarif-vormingus. Lisatud on uus kontroll allocClassWithName. Valik "-analyzer-display-progress" kuvab nüüd iga funktsiooni analüüsiaega. Nutika pointeri analüsaator (alpha.cplusplus.SmartPtr) on peaaegu valmis.
  • OpenCL-i tuge on laiendatud. Lisatud on tugi uutele laiendustele cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ja __cl_clang_non_portable_kernel_param_types. Jätkatud on OpenCL 3.0 spetsifikatsiooni rakendamist. C puhul kasutatakse vaikimisi OpenCL 1.2, kui pole otseselt valitud teist versiooni. C++ jaoks on lisatud tugi failidele laiendiga ".clcpp".
  • OpenMP 5.1 spetsifikatsioonis määratletud tsükli teisendusdirektiivide ("#pragma omp unrol" ja "#pragma omp tile") tugi on rakendatud.
  • Clang-format utiliiti on värskendatud järgmiste valikutega: SpacesInLineCommentPrefix kommentaaride ees olevate tühikute arvu määramiseks, IndentAccessModifiers, LambdaBodyIndentation ja PPIndentWidth kirjete, lambda-avaldiste ja eeltöötlusdirektiivide joondamise juhtimiseks. Päisefailide loendi sortimisvõimalusi (SortIncludes) on laiendatud. Lisatud on JSON-failide vormindamise tugi.
  • Klõbinalt korralikule linterile on lisatud suur hulk uusi tšekke.

LLVM 13.0 peamised uuendused:

  • Lisatud valik "-ehcontguard" CET-tehnoloogia kasutamiseks (Windows Control-flow Enforcement Technology ehk juhtimisvoo jõustamise tehnoloogia kaitseks erandite käsitlemise etapis tagastuspõhise programmeerimise (ROP) tehnikate abil loodud ärakasutamise eest.
  • Projekt debuginfo-test on ümber nimetatud projektiks cross-project-tests ja see on mõeldud erinevate projektide komponentide testimiseks, mitte ainult silumisteabe testimiseks.
  • Ehitussüsteem toetab mitme distributsiooni ehitamist, näiteks üks utiliitidega ja teine ​​arendajatele mõeldud teekidega.
  • AArch64 arhitektuuri taustprogramm toetab assembleris Armv9-A RME (Realm Management Extension) ja SME (Scalable Matrix Extension) laiendusi.
  • Hexagoni arhitektuuri taustaprogrammile on lisatud ISA V68/HVX tugi.
  • X86-taustasüsteemil on parem tugi AMD Zen 3 protsessoritele.
  • AMDGPU taustaprogrammile on lisatud GFX1013 RDNA2 APU tugi.
  • Libc++ jätkab C++20 ja C++2b standardite uute funktsioonide rakendamist, sealhulgas "concepts" teeki valmimist. Platvormi jaoks Windows Lisatud MinGW-l põhineva std::filesystemi tugi. Päisefailid on eraldatud. , Ja Lisatud on LIBCXX_ENABLE_INCOMPLETE_FEATURES ehitusvalik, et keelata mittetäieliku funktsionaalsusega päisefailid.
  • LLD linkerit on laiendatud, et toetada Big-endian Aarch64 protsessoreid, ja Mach-O taustaprogrammi on täiustatud, et võimaldada standardprogrammide linkimist. Lisatud on Glibc linkimiseks LLD abil vajalikud täiustused.
  • Llvm-mca (masinakoodi analüsaatori) utiliiti on uuendatud, et toetada protsessoreid, mis täidavad käske järjekorras (järjekorras superskalaarne konveier), näiteks ARM Cortex-A55.
  • AArch64 platvormi LLDB silur toetab nüüd täielikult pointeri autentimist, mälu sildistamise laienduse (MemTag) mehhanismi ja SVE registreid. Lisatud on käsud siltide seostamiseks iga mälu eraldamise toiminguga ja selle tagamiseks, et pointer oleks mälule juurdepääsu ajal seotud õige sildiga.
  • Projekti loodud binaarfailidele on lisatud LLDB silur ja Fortrani esiots Flang.

Allikas: opennet.ru

Ostke DDoS-kaitsega saitide jaoks usaldusväärne hostimine, VPS VDS-serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster