Pas disa muajsh zhvillimi, është zhvilluar versioni i projektit LLVM 19.1.0, i cili përmirëson mjetet (kompiluesit, optimizuesit dhe gjeneruesit e kodit) që kompilohet programet në kodin e ndërmjetëm RISC-podobne të instrukcioneve virtuale (një makinë virtuale me shumë nivele optimizimi). Pseudokodi i gjeneruar mund të kthehet në kodin e makinës për platformën e caktuar, ose të përdoret nga kompiluesi JIT për të formuar instruksionet e makinës në kohë reale gjatë ekzekutimit të programit. Bazuar në teknologjitë LLVM, projekti zhvillon kompiluesin Clang, i cili mbështet gjuhët e programimit C, C++ dhe Objective-C. Duke filluar nga filiali i kaluar, projekti kaloi në një model të ri për formimin e numrave të versioneve, sipas të cilit lëshimi zero ("N.0") përdoret gjatë zhvillimit, ndërsa versioni i parë stabile merret me numrin "N.1".
Në mesin e përmirësimeve në Clang 19:
- Janë shtuar mundësitë e përcaktuara në standardin C23:
- mbështetje për përdorimin e specifikatorit constexpr për definimin e objekteve;
- makros INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX dhe LDBL_NORM_MAX në float.h;
- mekanizmi «#embed» për integrimin e burimeve binare;
- tipi char8_t për stringjet dhe karakteret në UTF-8.
- Janë realizuar të gjitha mundësitë e përcaktuara në standardin C++17. Elemente përkatëse u përfshinë për të lidhur parametrat e shabllonit me argumente të përshtatshme, të cilat ishin çaktivizuar me dy standarde për shkak të problemeve të mbështetjes.
- Në mënyrën C++14, mbështetjeja për funksionin delete me specifikimin e madhësisë (sized deallocation) është aktivizuar si standart.
- Shtuar mundësi të reja në standardin C++20: funksionet e ndërtuara __is_layout_compatible dhe __is_pointer_interconvertible_base_of; mbështetje e plotë për shprehjet për importimin e moduleve; mbështetje fillestare për përcaktimin automatik të tipeve të argumenteve të shabllonit të klasës për aliaset e tipeve të krijuara përmes shabllonëve (CTAD për Alias Template).
- Shtuar mundësi të reja në standardin C++20: zgjatja e jetës së objekteve përkohësore në ciklet që përfshijnë vargje; supozita të transferueshme; lehtësimi i kufizimeve për constexpr dhe çaktivizimi i diagnostikës «-Winvalid-constexpr»; mbështetje për funksione statike dhe eksplicite anëtarësh me lista të njëjta parametrash.
- JanĂ« shtuar mundĂ«sitĂ« e lidhura me standardin e ardhshĂ«m C++2c (C++26): indeksimi i paketĂ«s sĂ« parametrave nĂ« shabllone; sintaksa â= delete(«arsye»)â; atribute pĂ«r lidhje tĂ« strukturuara; ndalimi i lidhjes sĂ« glvalue tĂ« kthyer me njĂ« vlerĂ« tĂ« pĂ«rkohshme; ciklet triviale pa fund pa sjellje tĂ« pasigurt; raportimi i gabimeve kur hiqet njĂ« tregues pĂ«r njĂ« tip tĂ« paplotĂ«; pĂ«rdorimi i kufizimeve nĂ« shprehjet e pĂ«rmbledhjes («âŠÂ»).
- Shtuar flamuj të rinj kompilatorësh:
- «-fsanitize=implicit-bitfield-conversion» për kontrollin e prerjeve të paqarta dhe ndryshimit të shenjës gjatë punës me fushat e bitëve.
- «-fsanitize=implicit-integer-conversion» për kontrollin e konvertimeve të paqarta të numrave të plotë.
- «-Wmissing-designated-field-initializers» për identifikimin e inicializatorëve të munguar për fushat.
- «-fexperimental-modules-reduced-bmi» për aktivizimin e BMI të reduktuar (Binary Module Interface) për modulat e emëruara C++20, duke lejuar përdorimin e modulave standarde C++.
- «-fexperimental-late-parse-attribute» për aktivizimin e analizes së vonuar të atributeve në kontekste specifike, për shembull, atributi counted_by.
- «-fseparate-named-sections» për krijimin e sekcioneve unike të ndara për simbolet globale në seksione speciale të emëruara.
- «-fms-define-stdc» përkompatibilitetin e STDC me MSVC.
- «-Wc++23-compat» dhe «-Wc++2c-compat» janë grupe paralajmërimesh për lehtësimin e migruese në C++23 dhe C++26.
- «-fdisable-block-signature-string» për të çaktivizuar gjenerimin e një nise me nënshkrim për blloqe.
- «-fpointer-tbaa» për të etiketuar treguesit e pa kompatibël, duke përdorur analizën e aliasëve të bazuar në tipa (TBAA).
- Janë shtuar atribute të reja: sized_by, counted_by_or_null, nonblocking, nonallocating, blocking, allocating, sized_by_or_null, amdgpu_max_num_work_groups(x, y, z).
- Janë shtuar funksione të reja të integruara: __builtin_readsteadycounter, __builtin_popcountg, __builtin_clzg, __builtin_ctzg, __is_bitwise_cloneable.
- Janë zgjeruar mjetet e diagnostikimit dhe analizës statike, janë shtuar kontrolle të reja.
Novitetet kryesore të LLVM 19:
- Në backend për arkitekturën RISC-V është shtuar mbështetje eksperimentale për zgjerimet Zabha (operacione atomike me memorie), Ssqosid, Ssnpm, Smnpm, Smmpm, Sspm dhe Supm (përdorimi i maskave për treguesit), Zba, Zbb, Zbs. Mbështetja për zgjerimet Ztso, Zabha, Zaamo dhe Zalrsc është stabilizuar.
- Në backend për arkitekturën AArch64 është shtuar mbështetje për procesorët Cortex-R82AE, Cortex-A78AE, Cortex-A520AE, Cortex-A720AE, Cortex-A725, Cortex-X925, Neoverse-N3, Neoverse-V3 dhe Neoverse-V3AE.
- Në backend për arkitekturën ARM është shtuar mbështetje për procesorin Cortex-R52+.
- Backendet për arkitekturën X86, LoongArch, WebAssembly, MIPS, PowerPC dhe AMDGPU janë përmirësuar.
- JanĂ« zgjeruar mundĂ«sitĂ« e organizuesit LLD. JanĂ« shtuar lloje tĂ« reja zhvendosjesh (relocations): CREL, GNU_PROPERTY_AARCH64_FEATURE_PAUTH, R_AARCH64_AUTH_ABS64 dhe R_AARCH64_AUTH_RELATIVE. ĂshtĂ« shtuar parametri «âcompress-sections ={none,zlib,zstd}[:level]» pĂ«r tĂ« zgjedhur algoritmin e kompresimit tĂ« seksioneve.
- Në bibliotekën Libc++ është vazhduar implementimi i mundësive të standardeve C++20, C++23 dhe C++26.
- Nga 3.6 deri në 3.8 janë rritur kërkesat për versionin e Python-it që nevojitet për ndërtimin e LLVM.
Burimi: opennet.ru
