Kuue kuu arenduse jĂ€rel on vĂ€lja antud projekti LLVM 22.1.0 versioon, mis arendab tööriistu (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerivad programme RISC-sarnaste virtuaalsete juhiste vahebitikoodiks (madala taseme virtuaalne masin mitmeastmelise optimeerimissĂŒsteemiga). Genereeritud pseudokood saab konverteerida masinkoodiks antud sihtplatvormile vĂ”i kasutada JIT-kompilaatoris masinajuhiste genereerimiseks otse programmi tĂ€itmise ajal. LLVM tehnoloogiate baasil arendatakse projekti raames kompilaatorit Clang, mis toetab programmeerimiskeeli C, C++ ja Objective-C. Alates 18.x harust on projekt lĂ€inud ĂŒle uuele versioonide nummerdamise skeemile, mille kohaselt kasutatakse nullversiooni (âN.0â) arendusprotsessis, ja esimene stabiilne versioon saab numbri âN.1â.
Clang 22 hulgas on parendused:
- Lisatud mĂ€lutokenite (Allocation Token) tugi, et tĂ€histada ainulaadseid identifikaatoreid mĂ€lumahtude eraldamise operatsioonide jaoks, mida teostatakse selliste funktsioonide abil nagu malloc. Identifikaatorid vĂ”imaldavad struktureerida teavet hunnikus (heap), lihtsustada mĂ€lu lekete avastamist ja realiseerida objektide grupeerimist vastavalt otstarbele vĂ”i muudatuste iseloomule (nt eristada «kuumi» vĂ”i «kĂŒlmi» andmeid). Sisse lĂŒlitamiseks tuleb kasutada lippu «-fsanitize=alloc-token».
- C keelega seotud funktsionaalsus:
- Töös on spetsifikatsiooni kavand, mis mÀÀratleb edasi lĂŒkatud tĂ€itmise mehhanismi «defer», vĂ”imaldades teatud toimingute sooritamist, kui hetke ulatusest vĂ€ljumine toimub. «defer» toetuse lubamiseks on lisatud lipp «-fdefer-ts».
- Lisatud sisseehitatud funktsioon __builtin_stack_address(), mis kordab GCC-s olevat sarnast funktsiooni. Funktsioon tagastab aadressi virnas, mis eraldab praeguse funktsiooni sooritava piirkonna, kus kutsuti __builtin_stack_address(), ja hiljem kutsutud funktsioonid.
- C2y tulevase standardi jaoks arendatavad funktsioonid:
- Lisatud toetused nimelistele tsĂŒklitele, mis vĂ”imaldavad tsĂŒklitele ja switch-lausele nimesid anda, mida saab kasutada break ja continue lausetes tsĂŒkli selgeks mÀÀramiseks, millest vĂ€lja minnakse. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // minema CONT1 continue outer; // minema CONT2 // CONT1 } // CONT2 }
- TĂ€psemalt ja integreeritud standardisse teostus sisseehitatud makrost "__COUNTER__", mis on mĂ”eldud unikaalsete identifikaatorite nimede genereerimiseks. Kehtestatud piirang 2147483647 makro kutse jaoks, mille ĂŒletamise korral ilmub viga.
- Hoiti tagasi hoiatus(-Wstatic-in-inline) kuvamine staatiliste funktsioonide vÔi muutuja kasutamisel funktsioonides, mis on deklareeritud kui "extern inline".
- C23 standardis mÀÀratletud funktsioonid:
- Pealkirjafaili float.h on lisatud toetust makrodele FLT_SNAN, DBL_SNAN ja LDBL_SNAN, mis realiseerivad signaalvÀÀrtused (mis pĂ”hjustavad erandi matemaatilistes operatsioonides) NaN tĂŒĂŒpide jaoks float, double ja long double.
- Parandatud viga, mille tĂ”ttu töötati erinevaid nimeta tĂŒĂŒpe sama tĂ”lkeĂŒhiku piires ĂŒhilduvateks, kui neil olid samad vĂ€ljad.
- Lipp â-MGâ, mis kasutatakse pealkirjade puudumise ignoreerimiseks sĂ”ltuvuste skaneerimise ajal, on laienanud direktiividele â#embedâ ja nĂŒĂŒd summutab vea vĂ€ljundi âfaili ei leitudâ, kui puudub fail, mis on mÀÀratud direktiivis â#embedâ.
- C++-ga seotud vÔimalused:
- Lisatud arendatav vĂ”imalus C++2c (C++26) struktuursed sidumised (structured binding) kontekstis âconstexprâ, st konstantsed vĂ€ljendid vĂ”ivad nĂŒĂŒd olla ise konstantsed vĂ€ljendid. Tugi on rakendatud massiivide ja lihtsate struktuuride jaoks (tupikud pole hetkel toetatud). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Vastavalt C++20 standardi nÔudele on tagatud piirangute (constraints) muutmine standardseks vormiks enne nende tÀitmise kontrollimist, mis vÔimaldab anda tÀpsemaid diagnostilisi sÔnumeid ja korrektselt töödelda malli argumentide asendusvigu, mida kasutatakse ainult concept-ids.
- Lisatud sisseehitatud funktsioonide pered â__builtin_[lt|gt|le|ge]_synthesizes_from_spaceshipâ, mis vĂ”imaldavad tuvastada, kas vĂ”rdlusoperaatorid ââ, â=â on sĂŒnteesitud operaatorist ââ.
- Parameeter â-Wincompatible-pointer-typesâ on muudetud veateate kuvamiseks hoiatuse asemel. Vana kĂ€itumise taastamiseks tuleks kasutada valikut â-Wno-error=incompatible-pointer-typesâ.
- Lisatud sisseehitatud funktsioonid __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter ja __builtin_dedup_pack. NĂ€iteks vĂ”imaldab builtin_dedup_pack eemaldada tĂŒĂŒpide loendist duplikaadid: using MyTypeList = TypeList<__builtin_dedup_packâŠ>; // tulemuseks on tĂŒĂŒp TypeList
- Tundmatu kĂ€itumise tĂ”rkeotsingu korral UBSani kaudu (-fsanitize=undefined -fsanitize-trap=undefined) on genereeritavasse tĂ”rgete teabesse lisatud teavet vigade pĂ”hjuste kohta. Vigade ĂŒksikasjade taseme mÀÀramiseks on lisatud lipp â-fsanitize-debug-trap-reasonsâ, mis vĂ”ib vĂ”tta vÀÀrtust âbasicâ ĂŒldiste kirjelduste jaoks (nĂ€iteks âTĂ€isarvude liitmine ĂŒletas piiriâ) ja âdetailedâ pĂ”hjaliku teabe lisamiseks (nĂ€iteks âallkirjastatud tĂ€isarvude liitmine ĂŒle piiri âa + bââ).
- Lisatud uusi kompilaatorilippude:
- â-f[no-]sanitize-debug-trap-reasonsâ on mĂ”eldud erandite (trap) tekkimise pĂ”hjuste sisestamise juhtimiseks tĂ”rgete teavet kompilatsiooni ajal reĆŸiimis â-fsanitize-trapâ.
- â-fsanitize=alloc-tokenâ, â-falloc-token-maxâ, â-fsanitize-alloc-token-fast-abiâ ja â-fsanitize-alloc-token-extendedâ on mĂ”eldud mĂ€lu eraldamise tokenite juhtimiseks.
- â-fmatrix-memory-layoutâ on mĂ”eldud mahtuvate tĂŒĂŒpide mĂ€lus paigutamise juhtimiseks (nĂ€iteks column-major â veergude kaupa, row-major â ridade kaupa).
- Funktsioonide jaoks on rakendatud atribuut âmalloc_spanâ, mis on sarnane malloc atribuudile, kuid seda rakendatakse funktsioonidele, mis tagastavad span-tĂŒĂŒpi struktuure, mis sisaldavad nĂ€idikut ja suuruse vĂ”i ploki lĂ”pus oleva nĂ€idiku vĂ€lja.
- Lisatud atribuudi «modular_format» dĂŒnaamiliseks valimiseks vajalikku staatiliselt sidumise rakenduse printf funktsiooni ajal kompileerimist.
- Diagnoosimise ja staatilise analĂŒĂŒsi vahendeid on laiendatud, lisatud uusi kontrollimisi (mitu tosinat tĂ€iustust, mis on seotud diagnoosimisega).
- X86 arhitektuuri taustsĂŒsteemi on lisatud tĂ€iendavad sisseehitatud funktsioonid (Intrinsics) SSE, AVX ja AVX512 laiendusi jaoks. Lisatud on kompilatsiooni reĆŸiimid Intel CPU-dele, mis pĂ”hinevad Wildcat Lake mikroomiarkitektuuril (-march=wildcatlake) ja Nova Lake (-march=novalake).
- AArch64 arhitektuuri taustsĂŒsteemis on lisatud tugi Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) ja Arm C1-Ultra (c1-ultra) protsessoritele. Lisatud on tĂ€iendavad sisseehitatud funktsioonid FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], FCVTA[US] kĂ€skude jaoks. Stabiliseeritud on FMV (Function Multi-Versioning) tugi. Kasutajatele on antud vĂ”imalus seadistada funktsioonide erinevate versioonide prioriteeti.
- LoongArch32 (LA32R, LA32S) arhitektuuri tugi on lisatud.
- ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly ja PowerPC arhitektuuride taustsĂŒsteeme on parendatud.
Allikas: opennet.ru
