Të dhëna për lëshimin e setit të kompilatorëve LLVM 21

Pas një gjashtë muajsh zhvillimi, është publikuar lëshimi i projektit LLVM 21.1.0, që zhvillon mjetin e punës (kompajlerët, optimizuesit dhe gjeneratorët e kodit), i cili përkthehet në një kod ndërmjetës RISC-ngjashëm që përmban instrukcione virtuale (një makinë virtuale me një sistem shumë-niveli optimizimi). Kodi i gjeneruar mund të konvertohet në kod makine për një platformë të caktuar ose të përdoret nga kompajleri JIT për të formësuar instrukcione makine direkt gjatë ekzekutimit të programit. Në bazë të teknologjive LLVM, projekti zhvillon kompajlerin Clang, i cili mbështet gjuhët programuese C, C++ dhe Objective-C. Duke filluar nga dega 18.x, projekti ka kaluar në një skemë të re të emërtimit të versioneve, në përputhje me të cilën lëshimi zero ("N.0") përdoret në procesin e zhvillimit, dhe versioni i parë stabil është i shoqëruar me numrin "N.1".

Përmirësime në Clang 21:

  • MundĂ«si tĂ« lidhura me C++:
    • Si nĂ« GCC, Ă«shtĂ« realizuar mundĂ«sia e pĂ«rdorimit tĂ« shprehjeve konstante nĂ« pjesĂ«t asambleshĂ«s, tĂ« definuara nga direktiva "asm": int foo() { asm((std::string_view("nop")) ::: (std::string_view("memory"))); }
    • Shtuar opcionet e zgjeruara pĂ«r shprehjet "new" dhe "delete", qĂ« mbĂ«shtesin argumentin "std::type_identity<T>", pĂ«rmes tĂ« cilit mund tĂ« jepet informata nĂ« lidhje me tipin e objektit, pĂ«r tĂ« cilin ndahet ose lirohet memoria.
    • Shtuar mundĂ«sia e llogaritjes sĂ« funksioneve lambda, qĂ« kapin lidhjet e strukturuara (structured binding), nĂ« fazĂ«n e kompajlimit nĂ« kontekstin e shprehjes konstante.
  • MundĂ«si tĂ« lidhura me standardin e ardhshĂ«m C++2c (C++26):
    • NĂ« lidhjet e strukturuara Ă«shtĂ« shtuar mundĂ«sia e pĂ«rdorimit tĂ« sintaksĂ«s « » pĂ«r treguesit (pack), qĂ« kapin numrin e mbetur tĂ« elementeve nga sekuenca e caktuar. auto [x,y,z] = f(); // nĂ« variablat x, y, z do tĂ« regjistrohen tre elemente, qĂ« kthehen nga f(). auto [
xs] = f(); // nĂ« paketĂ«n xs do tĂ« regjistrohen tĂ« gjitha elementet, qĂ« kthehen nga f(). auto [x, 
rest] = f(); // NĂ« x do tĂ« regjistrohet elementi i parĂ«, ndĂ«rsa nĂ« rest — elementĂ«t e tjerĂ«. auto [x, y, 
rest] = f(); // NĂ« x do tĂ« regjistrohet elementi i parĂ«, nĂ« y — i dyti, ndĂ«rsa nĂ« rest — i treti. auto [x, 
rest, z] = f(); // nĂ« x — i pari, nĂ« rest — i dyti, nĂ« z — i treti.
    • Shtohet mbĂ«shtetje pĂ«r "lĂ«vizshmĂ«rinĂ« triviale" tĂ« tipave (Trivial Relocatability), duke lejuar optimizimin e lĂ«vizjeve tĂ« objekteve tĂ« kĂ«tij tipi pĂ«rmes klonimit tĂ« tyre nĂ« memorie pa thirrjen e konstruktoreve ose destruktoreve. PĂ«r klasat janĂ« zbatuar pronat memberwise_trivially_relocatable dhe memberwise_replaceable, dhe pĂ«r lĂ«vizjen nĂ« nivel tĂ« ulĂ«t tĂ« njĂ« ose disa objekteve janĂ« shtuar funksionet trivially_relocate_at dhe trivially_relocate.
    • MundĂ«sia e aplikimit tĂ« lidhjes sĂ« strukturuar (structured binding) si kusht nĂ« operatorĂ«t if dhe switch.
    • MbĂ«shtetje pĂ«r lidhjen e funksionit main me modulin global dhe definimin e funksionit main nĂ« modula me emra.
  • MundĂ«si tĂ« zhvilluara pĂ«r standardin e ardhshĂ«m C2y:
    • Eliminimi i sjelljes sĂ« paqĂ«ndrueshme kur pĂ«rdoren shprehje me tipin void nĂ« disa kontekste, pĂ«r shembull, "(void)(void)1;".
    • Lejohet qĂ« file me kodin burimor tĂ« mos pĂ«rfundojĂ« me simbolin e linjĂ«s sĂ« re.
    • Shtuar prefiks tĂ« rinj pĂ«r literat octal — 0o dhe 0O, si dhe sekuencat e ikjes octal dhe hexadecimale "\o{
}" dhe \x{
}. MbĂ«shtetje pĂ«r literat octal 0xxx Ă«shtĂ« shpallur si e vjetruar. PĂ«r shembull, "0o123" dhe "\o{123}" nĂ« vend tĂ« "0123".
    • Shtuar operatorin "_Countof" pĂ«r tĂ« pĂ«rcaktuar numrin e elementeve nĂ« njĂ« array. Gjithashtu shtuar skedari header stdcountof.h, qĂ« pĂ«rcakton njĂ« variant tĂ« makros "countof", tĂ« realizuar pĂ«rmes "_Countof".
  • MundĂ«si tĂ« pĂ«rcaktuar nĂ« standardin C23:
    • Lejohet te ridĂ«gjohet tag-ndypes (struct, union, enum) brenda njĂ« blloku translacioni, nĂ«se pĂ«rcaktimet e pĂ«rsĂ«ritura janĂ« strukturore qĂ« i pĂ«rngjajnĂ« (numri i antarĂ«ve, llojet dhe emrat e tag-Ă«ve janĂ« identike).
    • PĂ«rdorimi i listave me numĂ«r tĂ« ndryshueshĂ«m argumentesh (variadic) Ă«shtĂ« thjeshtuar. Lejohet pĂ«rdorimi i njĂ« parametri variativ tĂ« vetĂ«m nĂ« emrin e tipit.
    • Shtuar funksioni i integruar "__builtin_c23_va_start()", qĂ« pĂ«rmirĂ«son sjelljen e diagnostikimit pĂ«r makron va_start() nĂ« modalitetin C23.
  • NĂ« modalitetin e pajtueshmĂ«risĂ« me kompajlerin MSVC lejohet pĂ«rdorimi i specifikatorit inline kur shpallet tipi i funksionit pĂ«rmes typedef, pĂ«r shembull, "typedef int inline Foo(int);"
  • Lejohet pĂ«rdorimi i kualifikatorit "restrict" pĂ«r tipet e array-ve me elemente tregues.
  • ParalajmĂ«rimet e reja tĂ« kompajlerit:
    • "-Wdefault-const-init-var" dhe "-Wdefault-const-init-field" — identifikimi i variablave dhe fushave tĂ« shĂ«nuara me const, qĂ« janĂ« pĂ«rcaktuar pa inicializim tĂ« qartĂ«.
    • "-Wimplicit-void-ptr-cast" — shfaqet kur ka njĂ« konvertim tĂ« paqartĂ« nga tipin "void*" nĂ« njĂ« tip tjetĂ«r tregues.
    • "-Wc++-keyword" — shfaqet kur pĂ«rdoren fjalĂ« kyçe "C++" si identifikues nĂ« "C".
    • "-Wc++-hidden-decl" — identifikon pĂ«rdorimin e llojeve tĂ« tageve, qĂ« janĂ« tĂ« dukshme nĂ« "C", por nuk janĂ« tĂ« dukshme nĂ« "C++" pĂ«r shkak tĂ« kufizimit tĂ« fushĂ«s sĂ« dukshmĂ«risĂ«.
    • "-Wimplicit-int-enum-cast" — identifikon konvertimet e paqarta nĂ« kodin C nga tipet e numrave nĂ« tipin enumeracion, qĂ« janĂ« tĂ« papajtueshĂ«m me "C++".
    • "-Wtentative-definition-compat" — diagnostika e pĂ«rcaktimeve tĂ« pĂ«rkohshme nĂ« "C" me pĂ«rcaktime tĂ« shumta, qĂ« janĂ« tĂ« papajtueshme me "C++".
    • "-Wunterminated-string-initialization" dhe "-Wc++-unterminated-string-initialization" — identifikimi i situatave tĂ« inicializimit nga njĂ« literale string, ku nuk mund tĂ« ruhet ndarĂ«si me kodin zero. PĂ«r tĂ« shĂ«nuar fushat dhe variablat nĂ« kodin C, qĂ« nuk kĂ«rkojnĂ« simbolin e fundit tĂ« zeros, Ă«shtĂ« shtuar atributi "nonstring".
    • "-Wjump-misses-init" — diagnostika e kalimit pĂ«rmes goto ose switch/case, qĂ« anashkalon inicializimin e njĂ« variabli lokal.
    • "-Wundef-true" — paralajmĂ«ron pĂ«r pĂ«rdorimin e vlerĂ«s "true" nĂ« preprocesorin C pa e definuar atĂ«.
    • "-Wnrvo" — diagnostika e NRVO tĂ« munguar (Named Return Value Optimization).
  • Flagjet e reja tĂ« kompajlerit:
    • «-fprofile-continuous» — aktivizimi i sinkronizimit tĂ« vazhdueshĂ«m tĂ« profilit nĂ« skedarin.
    • «-ftime-report-json» — dalja e tĂ« dhĂ«nave pĂ«r kohĂ«n e kompilimit nĂ« formatin JSON.
    • «-ignore-pch» — çaktivizimi i titujve tĂ« parakomplikuar.
    • «-fthinlto-distributor» dhe «-Xthinlto-distributor» — pĂ«r tĂ« aplikuar DTLTO (Integriteti i Distribuuar ThinLTO).
    • «-static-libclosure» — pĂ«r lidhjen statike tĂ« zgjerimeve runtime Blocks nĂ« platformĂ«n Windows.
  • Mjetet e diagnostikimit dhe analizĂ«s statike janĂ« zgjeruar, duke shtuar kontrolle tĂ« reja (mĂ« shumĂ« se njĂ«qind pĂ«rmirĂ«sime lidhur me diagnostikimin).
  • KĂ«to janĂ« pĂ«rmirĂ«suar pĂ«r arkitat ARM, Aarch64, AMDGPU, x86, RISC-V, LoongArch, MIPS dhe PowerPC. NĂ« backendin pĂ«r RISC-V Ă«shtĂ« shtuar pĂ«rkrahje eksperimentale pĂ«r assembler pĂ«r [[https://llvm.org/docs/RISCVUsage.html zgjerimet e Qualcomm uC, Andes dhe SiFive.

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