Dalja e setit të kompilatorëve LLVM 16.0

PasĂ« gjashtĂ« muajsh zhvillimi, u publikua lĂ«shimi i projektit LLVM 16.0 — njĂ« mjet qĂ« Ă«shtĂ« kompatibil me GCC (kompilatorĂ«t, optimizuesit dhe gjeneruesit e kodit), i cili kompilon programe nĂ« kodin e mesĂ«m RISC-pĂ«rshtatĂ«se tĂ« instruksioneve virtuale (njĂ« makinĂ« virtuale me nivele tĂ« shumta optimizimi). Pseudokodi i gjeneruar mund tĂ« konvertohet me ndihmĂ«n e JIT-kompilatorit nĂ« instruksione makinerie nĂ« momentin e ekzekutimit tĂ« programit.

Përmirësimet kryesore në Clang 16.0:

  • Standarti i pĂ«rdorur si standard i paracaktuar pĂ«r C++/ObjC++ Ă«shtĂ« vendosur nĂ« gnu++17 (mĂ« parĂ« Ă«shtĂ« pĂ«rdorur gnu++14), qĂ« nĂ«nkupton pĂ«rkrahjen e mundĂ«sive tĂ« C++17 me zgjerime GNU. PĂ«r tĂ« kthyer sjelljen e mĂ«parshme, mund tĂ« pĂ«rdoret opsioni "-std=gnu++14".
  • JanĂ« implementuar mundĂ«si tĂ« zgjeruara qĂ« lidhen me standardin C++20:
    • Funksionet speciale qĂ« janĂ« kushtimisht triviale,
    • kapja e lidhjeve tĂ« strukturuara nĂ« funksionet lambda,
    • Operatori i barazisĂ« brenda shprehjeve,
    • MundĂ«sia pĂ«r tĂ« mos e specifikuar fjalĂ«n kyçe typename nĂ« disa kontekste,
    • LejueshmĂ«ria e inicializimit tĂ« agreguara nĂ« klllufat ("Aggr(val1, val2)").
  • JanĂ« implementuar mundĂ«si tĂ« pĂ«rcaktuara nĂ« standardin e ardhshĂ«m C++2b:
    • Lejohet vendosja e etiketave nĂ« fund tĂ« shprehjeve pĂ«rbĂ«rĂ«se,
    • static operator(),
    • static operator[],
    • Sigurohet pĂ«rputhshmĂ«ria me tipin char8_t,
    • Zgjeruar gamĂ«n e simboleve qĂ« lejohen pĂ«r t'u pĂ«rdorur nĂ« "\N{
}",
    • Shtuar mundĂ«sia e pĂ«rdorimit tĂ« variablave tĂ« shpallura si "static constexpr" nĂ« funksionet e shpallura si constexpr.
  • JanĂ« implementuar mundĂ«si tĂ« pĂ«rcaktuara nĂ« standardin e ardhshĂ«m tĂ« C-sĂ«, C2x:
    • PĂ«r tĂ« çaktivizuar paralajmĂ«rimin "-Wunused-label", Ă«shtĂ« lejuar pĂ«rdorimi i atributit "[[maybe_unused]]" pĂ«r etiketat,
    • Lejohet vendosja e etiketave nĂ« çdo vend brenda shprehjeve pĂ«rbĂ«rĂ«se,
    • Shtuar operatorĂ«t typeof dhe typeof_unqual,
    • NjĂ« tip i ri nullptr_t dhe konstante nullptr pĂ«r tĂ« pĂ«rcaktuar tregues tĂ« null, i cili mund tĂ« konvertohet nĂ« çdo tip tregues dhe tĂ« pĂ«rfaqĂ«sojĂ« variantin NULL, i cili nuk Ă«shtĂ« i lidhur me tipat e numrave tĂ« plotĂ« dhe tipin void*.
    • NĂ« modalitetin C2x, lejohet thirrja e makros va_start me numĂ«r variativ argumetesh.
  • NĂ« modet e pĂ«rputhshmĂ«risĂ« me standardet C99, C11 dhe C17, opsionet "-Wimplicit-function-declaration" dhe "-Wimplicit-int" tani, sipas parazgjedhjes, japin njĂ« gabim nĂ« pĂ«rputhje me njĂ« paralajmĂ«rim.
  • PĂ«rdorimi i drejtpĂ«rdrejtĂ« tĂ« "void *" (p.sh., "void func(void *p) { *p; }") nĂ« modĂ«n C++ tani çon nĂ« gjenerimin e gabimeve, ashtu si nĂ« ISO C++, GCC, ICC dhe MSVC.
  • ShĂ«nimin e fushave tĂ« bitĂ«ve si operandĂ« tĂ« instruksioneve (p.sh., "__asm { mov eax, s.bf }") nĂ« blloqet inline tĂ« asamblesĂ« nĂ« stilin Microsoft tani çon nĂ« gjenerimin e gabimeve.
  • Shtuar diagnozĂ«n pĂ«r praninĂ« e strukturave dhe sindikatave tĂ« ndryshme me emra tĂ« njĂ«jtĂ« nĂ« module tĂ« ndryshme.
  • MundĂ«sitĂ« qĂ« lidhen me mbĂ«shtetjej OpenCL dhe OpenMP janĂ« zgjeruar. Diagnoza e shabloneve C++ nĂ« argumentet e bĂ«rthamĂ«s OpenCL Ă«shtĂ« pĂ«rmirĂ«suar. MbĂ«shtetje mĂ« e mirĂ« pĂ«r bllokun e zĂ«vendĂ«simit nĂ« radhĂ« pĂ«r AMDGPU. TĂ« gjitha funksionet tani kanĂ« pĂ«rfshirĂ« automatikisht atributin nounwind. MbĂ«shtetje mĂ« e mirĂ« pĂ«r funksionet e ndĂ«rtuara.
  • Shtuar mundĂ«sia e pĂ«rdorimit tĂ« variablĂ«s mjedisore CLANG_CRASH_DIAGNOSTICS_DIR pĂ«r tĂ« pĂ«rcaktuar dosjen nĂ« tĂ« cilĂ«n ruhen tĂ« dhĂ«nat diagnostikuese pĂ«r ndĂ«rprerjet e papritura.
  • MbĂ«shtetje pĂ«r Unicode Ă«shtĂ« azhurnuar nĂ« specifikimin Unicode 15.0. Lejohet pĂ«rdorimi i disa simboleve matematike nĂ« identifikues, si "₊" (p.sh., "double xₖ₊₁").
  • Shtuar mbĂ«shtetje pĂ«r ngarkimin e disa skedave konfigurimi (sĂ« pari ngarkohen skedat e konfigurimit tĂ« parazgjedhura, pastaj ato tĂ« pĂ«rcaktuara pĂ«rmes flamurit "—config=", i cili tani mund tĂ« specifikohet disa herĂ«). Renditja e ngarkimit tĂ« skedave tĂ« konfigurimit tĂ« parazgjedhura Ă«shtĂ« ndryshuar: clang pĂ«rpiqet sĂ« pari tĂ« ngarkojĂ« skedarin -.cfg, dhe nĂ«se nuk gjendet pĂ«rpiqet tĂ« ngarkojĂ« dy skeda .cfg dhe .cfg. PĂ«r tĂ« çaktivizuar ngarkimin e skedave tĂ« konfigurimit tĂ« parazgjedhura Ă«shtĂ« shtuar flamuri "—no-default-config."
  • PĂ«r tĂ« siguruar ndĂ«rtime tĂ« pĂ«rsĂ«ritshme, Ă«shtĂ« shtuar mundĂ«sia pĂ«r tĂ« zĂ«vendĂ«suar vlerat e datĂ«s dhe orĂ«s aktuale nĂ« makros __DATE__, __TIME__ dhe __TIMESTAMP__ me kohĂ«n e caktuar nĂ« variablĂ«n mjedisore SOURCE_DATE_EPOCH.
  • PĂ«r tĂ« kontrolluar nĂ«se funksionet e ndĂ«rtuara (builtin) qĂ« mund tĂ« pĂ«rdoren nĂ« kontekstin e konstantave janĂ« tĂ« pranishme, Ă«shtĂ« shtuar makros "__has_constexpr_builtin".
  • Shtuar njĂ« flamur tĂ« ri tĂ« kompilimit "-fcoro-aligned-allocation" pĂ«r shpĂ«rndarjen e pĂ«rputhshme tĂ« kornizave tĂ« kooperacionit.
  • NĂ« flamurin "-fstrict-flex-arrays=", Ă«shtĂ« implementuar mbĂ«shtetje e nivelit tĂ« tretĂ« pĂ«r verifikimin e elementit fleksibĂ«l tĂ« masĂ«s nĂ« struktura (Flexible Array Members, njĂ« masĂ« me madhĂ«si tĂ« paqartĂ« nĂ« fund tĂ« strukturĂ«s). NĂ« nivelin e tretĂ«, vetĂ«m madhĂ«sia "[]" (p.sh., "int b[]") pĂ«rpunohen si njĂ« masĂ« fleksibile, ndĂ«rsa madhĂ«sia "[0]" (p.sh., "int b[0]") nuk trajtohet si e tillĂ«.
  • ËshtĂ« shtuar flagu «-fmodule-output» pĂ«r tĂ« aktivizuar modelin e njĂ«fazshĂ«m tĂ« pĂ«rmbledhjes pĂ«r modulat standarde C++.
  • ËshtĂ« shtuar rethi «-Rpass-analysis=stack-frame-layout», i cili lejon diagnostikimin e problemeve me renditjen e kuadrove tĂ« stack.
  • ËshtĂ« shtuar njĂ« atribut i ri __attribute__((target_version(«cpu_features»))) dhe Ă«shtĂ« zgjeruar funksionaliteti i atributit __attribute__((target_clones(«cpu_features1″,»cpu_features2»,
))) pĂ«r tĂ« zgjedhur versione specifike tĂ« funksioneve qĂ« ofrohen nga CPU AArch64.
  • JanĂ« zgjeruar mjetet e diagnostikimit:
    • ËshtĂ« shtuar njĂ« paralajmĂ«rim «-Wsingle-bit-bitfield-constant-conversion» pĂ«r tĂ« identifikuar truncatimin implicit kur caktohet njĂ« nĂ« njĂ« fushĂ« bital njĂ«bit.
    • JanĂ« zgjeruar diagnostikimet pĂ«r variablat constexpr tĂ« pa inicializuar.
    • JanĂ« shtuar paralajmĂ«rimet «-Wcast-function-type-strict» dhe «-Wincompatible-function-pointer-types-strict» pĂ«r tĂ« identifikuar probleme tĂ« mundshme gjatĂ« konvertimit tĂ« tipeve tĂ« funksioneve.
    • ËshtĂ« realizuar diagnostika e pĂ«rdorimit tĂ« emrave tĂ« pasaktĂ« ose tĂ« rezervuar tĂ« moduleve nĂ« blloqet e eksportit.
    • ËshtĂ« pĂ«rmirĂ«suar identifikimi i fjalĂ«ve kyçe tĂ« munguar «auto» nĂ« pĂ«rcaktimet.
    • NĂ« implementimin e paralajmĂ«rimit «-Winteger-overflow» janĂ« shtuar kontrolle pĂ«r situata tĂ« tjera qĂ« çojnĂ« nĂ« overflow.
  • ËshtĂ« realizuar mbĂ«shtetje pĂ«r arkitekturĂ«n e grupit tĂ« komandave LoongArch (-march=loongarch64 ose -march=la464), qĂ« pĂ«rdoret nĂ« procesorĂ«t Loongson 3 5000 dhe implementon njĂ« ISA tĂ« ri RISC, tĂ« ngjashĂ«m me MIPS dhe RISC-V.

Novitete kryesore LLVM 16.0:

  • NĂ« kodin LLVM Ă«shtĂ« lejuar pĂ«rdorimi i elementeve tĂ« pĂ«rcaktuara nĂ« standardin C++17.
  • JanĂ« rritur kĂ«rkesat pĂ«r ambientin pĂ«r kompilimin e LLVM. Mjetet e ndĂ«rtimit tani duhet tĂ« mbĂ«shtesin standardin C++17, pra pĂ«r ndĂ«rtimin kĂ«rkohen si minimum GCC 7.1, Clang 5.0, Apple Clang 10.0, ose Visual Studio 2019 16.7.
  • NĂ« backend pĂ«r arkitekturĂ«n AArch64 Ă«shtĂ« shtuar mbĂ«shtetja pĂ«r CPU Cortex-A715, Cortex-X3 dhe Neoverse V2, assembler pĂ«r RME MEC (Kontekste tĂ« Enkriptimit tĂ« MemorisĂ«), zgjerime Armv8.3 (Numri Kompleks) dhe multi-versioning (Versionimi i ShumĂ« Funksionesh).
  • NĂ« backend pĂ«r arkitekturĂ«n ARM Ă«shtĂ« ndĂ«rprerĂ« mbĂ«shtetja pĂ«r platformat e synuara Armv2, Armv2A, Armv3 dhe Armv3M, pĂ«r tĂ« cilat gjenerimi i kodit nuk garantoheshin. ËshtĂ« shtuar mundĂ«sia e gjenerimit tĂ« kodit pĂ«r instruksionet qĂ« punojnĂ« me numra kompleksĂ«.
  • NĂ« backend pĂ«r arkitekturĂ«n X86 Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r arkitekturat e grupit tĂ« komandave (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. ËshtĂ« shtuar mbĂ«shtetje pĂ«r instruksionet RDMSRLIST, RMSRLIST dhe WRMSRNS. JanĂ« realizuar opsionet «-mcpu=raptorlake», «-mcpu=meteorlake», «-mcpu=emeraldrapids», «-mcpu=sierraforest», «-mcpu=graniterapids» dhe «-mcpu=grandridge».
  • ËshtĂ« shtuar mbĂ«shtetje zyrtare pĂ«r platformĂ«n LoongArch.
  • Backend-et pĂ«r arkitekturĂ«n MIPS, PowerPC dhe RISC-V janĂ« pĂ«rmirĂ«suar.
  • NĂ« debugin LLDB Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r debugin e skedarĂ«ve ekzekutivĂ« 64-bit pĂ«r arkitekturĂ«n LoongArch. ËshtĂ« pĂ«rmirĂ«suar pĂ«rpunimi i simboleve tĂ« debugin COFF. ËshtĂ« garantuar filtrimi i kopjeve tĂ« DLL-ve nĂ« listĂ«n e moduleve tĂ« ngarkuara nĂ« Windows.
  • NĂ« bibliotekĂ«n Libc++ puna kryesore Ă«shtĂ« pĂ«rqendruar nĂ« implementimin e mbĂ«shtetjes pĂ«r mundĂ«sitĂ« e reja tĂ« standardeve C++20 dhe C++23.
  • NĂ« lidhĂ«sin LDD Ă«shtĂ« reduktuar ndjeshĂ«m koha e lidhjes pĂ«rmes paralelizimit tĂ« operacioneve tĂ« skanimit tĂ« lĂ«vizjeve tĂ« adresave dhe inicializimit tĂ« seksioneve. ËshtĂ« shtuar mbĂ«shtetje pĂ«r kompresimin e seksioneve duke pĂ«rdorur algoritmin ZSTD.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster