Pärast kuue kuu arendust on välja antud projekti LLVM 19.1.0 versioon, mis arendab tööriistasid (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerivad programme RISC-sarnaste virtuaalsete käsu vaheliste bitikoodideks (madala taseme virtuaalne masin paljude optimeerimisskeemidega). Genereritav pseudokood saab transformeerida masina koodiks määratud sihtplatvormile või kasutada JIT-kompilaatorit masina instruktsioonide genereerimiseks otse programmi täitmise ajal. LLVM tehnoloogiate baasil arendatakse projekti raames Clang kompilaatorit, mis toetab programmeerimiskeeli C, C++ ja Objective-C. Alates eelmisest versioonist on projekt läinud üle uuele versioonide numbrite süsteemile, mille kohaselt kasutatakse nullversiooni („N.0“) arenduse käigus, samas kui esimene stabiilne versioon on varustatud numbriga „N.1“.
Clang 19 parenduste seas:
- Lisatud võimalused, mis on määratletud C standardis C23:
- constexpr spetsiifikaatorite kasutamise tugi objektide määratlemiseks;
- makrod INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX ja LDBL_NORM_MAX failis float.h;
- mehaanika «#embed» binaarsete ressursside integreerimiseks;
- char8_t tüüp strings ja sümbolite jaoks UTF-8-s.
- On tagatud kõikide C++17 standardis määratletud võimaluste rakendamine. Lõplikuks elemendiks sai toetuse lisamine malle parameetrite vastendamise elementide jaoks, mis olid vaikimisi keelatud ühilduvusprobleemide tõttu.
- C++14 režiimis on vaikimisi lubatud delete funktsiooni tugi suuruse määramisega (sized deallocation),
- On lisatud C++20 standardiga seotud võimalused: sisseehitatud funktsioonid __is_layout_compatible ja __is_pointer_interconvertible_base_of; täielik toetus moodulite importimise avaldustele; algne tugi klassi malli parameetrite tüübi automaatseks määramiseks, mis on loodud mallide abil tüübi aliasite jaoks (CTAD Alias Template).
- On lisatud C++20 standardiga seotud võimalused: ajutiste objektide eluea pikendamine tsüklites, mis hõlmavad vahemikke; kantavad eeldused; constexpr piirangute leevendamine ja diagnoosi „-Winvalid-constexpr” keelamine; staatiliste ja eksplicitsete klassi liikmete funktsioonide tugi sama parameetriloendi korral.
- Lisatud C++2c (C++26) tulevase standardi seonduvad võimalused: šabloonide parameetrite paketi indeksimine; süntaks ‘= delete(«põhjus»)’; atribuudid struktureeritud sidumiste jaoks; glvalue tagastamise sidumise keelamine ajutise väärtusega; triviaalne lõputud tsüklid ilma määratlemata käitumiseta; viga näidatakse, kui eemaldatakse viide mittetäielikule tüübile; piirangute rakendamine kokkusurumise avaldustes («…«).
- Lisatud uusi kompilaatorilippude:
- «-fsanitize=implicit-bitfield-conversion» bitiväljadega töötamisel varjatud kärpimise ja märgi muutuse kontrollimiseks.
- «-fsanitize=implicit-integer-conversion» varjatud täisarvude konversioonide kontrollimiseks.
- «-Wmissing-designated-field-initializers» puuduvate välialgatiste tuvastamiseks.
- «-fexperimental-modules-reduced-bmi» C++20 nimetatud moodulite jaoks kärbitud BMI (Binary Module Interface) kasutuselevõtmiseks, võimaldades standardsete moodulite kasutamist C++.
- «-fexperimental-late-parse-attribute» kontekstispetsiifiliste atribuutide hilise parsimise võimaldamiseks, näiteks counted_by atribuut.
- «-fseparate-named-sections» globaalsele sümbolitele ainulaadsete eraldi sektsioonide loomiseks nimega erisektsioonides.
- «-fms-define-stdc» STDC ühilduvuse tagamiseks MSVC-ga.
- «-Wc++23-compat» ja «-Wc++2c-compat» — hoiatusgrupid, mis lihtsustavad üleminekut C++23 ja C++26-le.
- «-fdisable-block-signature-string» allkirja genereerimise väljalülitamiseks plokkide jaoks.
- «-fpointer-tbaa» ebakõlblike näidikute märgistamiseks, kasutades tüüpide põhist aliasanalüüsi (TBAA).
- Uued atribuudid: sized_by, counted_by_or_null, nonblocking, nonallocating, blocking, allocating, sized_by_or_null, amdgpu_max_num_work_groups(x, y, z).
- Uued sisseehitatud funktsioonid: __builtin_readsteadycounter, __builtin_popcountg, __builtin_clzg, __builtin_ctzg, __is_bitwise_cloneable.
- Diagnostika- ja staatilise analüüsi tööriistu on laiendatud, lisatud uued kontrollid.
LLVM 19 peamised uuendused:
- RISC-V arhitektuuri tagaküljel on lisatud eksperimenditoe laienemised Zabha (mäluga seotud atomaarsed operatsioonid), Ssqosid, Ssnpm, Smnpm, Smmpm, Sspm ja Supm (näidikute maskide kasutamine), Zba, Zbb, Zbs. Laienemiste Ztso, Zabha, Zaamo ja Zalrsc tugi on stabiliseeritud.
- AArch64 arhitektuuri tagaküljel on lisatud toetus protsessoritele Cortex-R82AE, Cortex-A78AE, Cortex-A520AE, Cortex-A720AE, Cortex-A725, Cortex-X925, Neoverse-N3, Neoverse-V3 ja Neoverse-V3AE.
- ARM arhitektuuri tagaküljel on lisatud toetus protsessorile Cortex-R52+.
- Tagaküljed on paranenud X86, LoongArch, WebAssembly, MIPS, PowerPC ja AMDGPU arhitektuuride jaoks.
- LLD koostamise võimekust on laiendatud. On lisatud uusi ümberpaigutusi (relocations): CREL, GNU_PROPERTY_AARCH64_FEATURE_PAUTH, R_AARCH64_AUTH_ABS64 ja R_AARCH64_AUTH_RELATIVE. On lisatud parameeter „—compress-sections ={none,zlib,zstd}[:level]“ sektsioonide kokkusurumise algoritmi valimiseks.
- Libc++ raamatukogus on jätkatud C++20, C++23 ja C++26 standardite toetuse rakendamist.
- Alates 3.6-st kuni 3.8-ni on suurenenud Python'i versiooni nõuded LLVM-i kokkupanekuks.
Allikas: opennet.ru
