Një grup kompilatorësh LLVM 18 është në dispozicion

Pas six muajsh zhvillimi, u publikua versioni i projektit LLVM 18.1.0 - një mjet i pajtueshëm me GCC (kompilatorë, optimizues dhe gjenerues kodi), që compilon programe në kodin e ndërmjetëm të instrukcioneve virtuale të ngjashme me RISC (një makinë virtuale me nivele të shumta optimizimi). Kodi i gjeneruar mund të shndërrohet me ndihmën e JIT-kompilatorit në instruksione makinerike në momentin e ekzekutimit të programit.

Duke filluar nga dega 18.x, projekti kaloi në një skemë të re të formimit të numrave të versioneve. Në përputhje me projektet GCC dhe GDB, lëshimi zero («N.0») tani përdoret në procesin e zhvillimit, ndërsa versioni i parë stabil është i numëruar me «N.1». Ky ndryshim mundëson ndarjen e ndërtimeve bazuar në degën e zhvillimit (mainline) nga ndërtimet e degës me lëshime përfundimtare. Për shembull, gjatë përgatitjes së këtij lëshimi, zhvillimi u krye duke përdorur degën e paqëndrueshme LLVM 18.0, ndërsa lëshimi i parë stabil doli me numrin 18.1.0. Në të ardhmen, sipas nevojës, mund të krijohen lëshime korrektuese çdo dy javë me numrat 18.1.1, 18.1.2 etj. Në rast se bëhen ndryshime në degën aktuale që thyejnë ABI-në, përditësimi do të formohet me ndryshimin e numrit të dytë të versionit (dmth 18.2.0).

Përmirësimet kryesore në Clang 18:

  • Ndryshimet e lidhura me gjuhĂ«n C:
    • Strukturat, unionet dhe array-t me shenjĂ«n «const» tani mund tĂ« pĂ«rdoren si shprehje konstante, nĂ« pĂ«rputhje me GCC.
    • Enumeracionet (enum) tani pasqyrohen nĂ« metadata TBAA (Analiza e Aliasit tĂ« Bazuar nĂ« Tip) nĂ« tipin e tyre tĂ« plotĂ« numerik, pĂ«rveç se trajtohen si tip «char».
    • Shtuar mbĂ«shtetje pĂ«r atributin «counted_by», pĂ«rmes tĂ« cilit mund tĂ« tregoni njĂ« fushĂ« nĂ« strukturĂ« me array fleksibĂ«l qĂ« pĂ«rcakton numrin e elementeve nĂ« array-n fleksibĂ«l. Atributi mund tĂ« pĂ«rdoret nĂ« clang pĂ«r tĂ« pĂ«rmirĂ«suar efikasitetin e kontrolleve tĂ« daljes pĂ«rtej kufirit.
  • AftĂ«sitĂ« qĂ« do tĂ« definohen nĂ« standardin e ardhshĂ«m tĂ« C-sĂ« C23:
    • Shtuar mbĂ«shtetje pĂ«r flag-un «-std=c23» dhe «-std=gnu23», si dhe vlerĂ«n «202311L» pĂ«r makron «__STDC_VERSION__», qĂ« pĂ«rcaktojnĂ« standardin C23 dhe zgjerimet GNU C23.
    • Shtuar mbĂ«shtetje pĂ«r shprehjen «requires c23» pĂ«r lidhjen e moduleve me mbĂ«shtetje pĂ«r standardin C23.
    • Implementuar mbĂ«shtetje pĂ«r daljen e tipit gjatĂ« pĂ«rcaktimit tĂ« objekteve, qĂ« lejon pĂ«rdorimin e shenjĂ«s «auto» pĂ«r pĂ«rcaktimin e tipit tĂ« variablave bazuar nĂ« tipin e shprehjes pĂ«r inicializimin e tyre. PĂ«r shembull: «auto y = cos(x);».
    • Shtuar mbĂ«shtetje pĂ«r skedarin e titullit me makro pĂ«r kontrollin e llogaritjeve tĂ« tĂ«rĂ«.
    • Lejohet vendosja e etiketave nĂ« çdo vend brenda shprehjeve tĂ« pĂ«rbĂ«ra.
    • Dhe me kĂ«tĂ« kompilim nĂ« modalitetin C23, mbĂ«shtetje pĂ«r trigrafĂ«t Ă«shtĂ« ndĂ«rprerĂ« nĂ« kod, sekuenca e tre ASCII-symboleve qĂ« trajtohen si njĂ« simbol, pĂ«r shembull, sekuenca «??=» mund tĂ« pĂ«rdorej nĂ« vend tĂ« «#». Pas shfaqjes sĂ« Unicode, mbĂ«shtetja pĂ«r trigrafĂ«t ka humbur kuptimin.
  • AftĂ«sitĂ« e lidhura me standardin C++20: Implementuar mundĂ«si eksperimentale pĂ«r tĂ« pĂ«rdorur nĂ« template argumente tĂ« llojeve tĂ« tjera, pĂ«rveç llojeve, pĂ«r shembull, letra me pikĂ« floating, pointer dhe referenca pĂ«r nĂ«nobjekte.
  • AftĂ«sitĂ« e lidhura me standardin C++23: Shtuar mbĂ«shtetje eksperimentale pĂ«r mekanizmin «Deducing this», qĂ« lejon pĂ«rdorimin nĂ« template tĂ« parametrave me shenjĂ«n «this» dhe i jep mundĂ«si funksionit tĂ« klasĂ«s tĂ« dijĂ« kategorinĂ« e shprehjes (pĂ«r shembull, nĂ«se Ă«shtĂ« njĂ« konstantĂ«), pĂ«r tĂ« cilĂ«n kjo funksion Ă«shtĂ« thirrur.
  • MundĂ«si tĂ« lidhura me standardin e ardhshĂ«m C++2c (C++26):
    • Shtuar mundĂ«sia e pĂ«rdorimit tĂ« disa variablave tĂ« plotĂ«simit me emrin «_» nĂ« njĂ« fushĂ« tĂ« njĂ«jtĂ« pamjeje, pĂ«r shembull, tani janĂ« struktura tĂ« sakta: struct S { int _, _; }; void func() { int _, _; } void other() { int _; // mĂ« parĂ« shfaqej njĂ« paralajmĂ«rim nĂ« modin -Wunused }
    • Ofrohet mundĂ«sia e pĂ«rdorimit tĂ« literalĂ«ve tĂ« vargut nĂ« kontekste ku ata nuk pĂ«rdoren pĂ«r inicializimin e njĂ« array simbolesh dhe nuk pĂ«rfshihen nĂ« kodin pĂ«rfundimtar, por pĂ«rdoren vetĂ«m gjatĂ« kompilimit pĂ«r mesazhe diagnostike dhe pĂ«rproçesim, pĂ«r shembull, si parametra tĂ« drejtimeve dhe atributeve _Pragma, asm, extern, static_assert, [[deprecated]] dhe [[nodiscard]].
    • Dhe tani Ă«shtĂ« pohuar si tĂ« vjetruar ekzekutimi i transformimeve tĂ« paqarta tĂ« vlerave tĂ« enumeruar nĂ« llogaritjet aritmetike. int main() { enum E1 { e }; enum E2 { f }; bool b = e

      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