Ngemva kwezinyanga eziyisithupha zokuthuthukiswa, i-LLVM 22.1.0 ikhishwe. Ithuthukisa amathuluzi (ama-compilers, ama-optimizer, kanye nama-code generator) ahlanganisa izinhlelo zibe yi-bitcode ephakathi yemiyalelo ebonakalayo efana ne-RISC (umshini we-virtual osezingeni eliphansi onohlelo lokwenza ngcono olunezinga eziningi). I-pseudocode ekhiqizwe ingaguqulwa ibe yikhodi yomshini yesikhulumi esiqondiwe esinikeziwe noma isetshenziswe yi-just-in-time compiler (JIT) compiler ukukhiqiza imiyalelo yomshini ngqo ngesikhathi sokwenziwa kohlelo. Ngokusekelwe kubuchwepheshe be-LLVM, iphrojekthi ithuthukisa i-Clang compiler, isekela izilimi zokuhlela ze-C, C++, kanye ne-Objective-C. Kusukela ngegatsha le-18.x, iphrojekthi ishintshele ohlelweni olusha lokufaka izinombolo lwenguqulo, ngokusho kwalo ukukhishwa okungu-0 ("N.0") kusetshenziswa ngesikhathi sokuthuthukiswa, kanti inguqulo yokuqala eqinile inomboro "N.1."
Ukuthuthukiswa kwe-Clang 22 kufaka:
- Ukwengezwa kokusekelwa kwamathokheni okwabiwa kwememori (Amathokheni Okwabiwa) okumaka imisebenzi yokwabiwa kwememori eyenziwa kusetshenziswa imisebenzi efana ne-malloc enesikhombi esiyingqayizivele. Amathokheni okwabiwa avumela ukuhlela ulwazi lwenqwaba, ukwenza lula ukutholwa kokuvuza kwememori, nokuvumela ukuhlanganiswa kwezinto ngokusekelwe enjongweni yazo noma amaphethini okuguqulwa (isb., ukuhlukanisa idatha "eshisayo" "ebandayo"). Ukuze unike amandla, sebenzisa ifulegi elithi "-fsanitize=alloc-token".
- Izici ezihlobene nolimi lwe-C:
- Incazelo ebhaliwe echaza indlela yokusebenza ehlehlisiwe "yokuhlehlisa" isetshenzisiwe, okuvumela izenzo ukuthi zenziwe lapho ububanzi bamanje buphuma. Ifulegi elithi "-fdefer-ts" lengeziwe ukuze kuvunyelwe ukwesekwa "kokuhlehlisa".
- Umsebenzi owakhelwe ngaphakathi __builtin_stack_address() ungeziwe, ubonisa umsebenzi ofanayo ku-GCC. Lo msebenzi ubuyisela ikheli le-stack elihlukanisa indawo ye-stack yomsebenzi wamanje obizwa ngokuthi __builtin_stack_address() kanye nemisebenzi elandelayo oyibizayo.
- Amakhono athuthukiswa izinga le-C2y elizayo:
- Ukwesekwa okwengeziwe kwama-loop aqanjwe ngamagama, okukuvumela ukuthi unikeze amagama kuma-loop kanye ne-switch statements, angachazwa ezitatimendeni ze-break kanye ne-continue ukuze kuchazwe ngokucacile i-loop okufanele iphume kuyo. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
- Ukusetshenziswa kwe-macro "__COUNTER__" eyakhelwe ngaphakathi, eyenzelwe ukukhiqiza amagama okuhlonza ahlukile, kunwetshiwe futhi kufakiwe ku-standard. Umkhawulo wezingcingo ezingu-2147483647 kule macro usethiwe; ukudlula lo mkhawulo kuzodala iphutha.
- Kususwe isexwayiso (-Wstatic-in-line) lapho kusetshenziswa imisebenzi emile noma izinto eziguquguqukayo ngaphakathi kwemisebenzi emenyezelwe njenge-"extern inline".
- Amakhono achazwe ezingeni le-C23 C:
- Ifayela lekhanda le-float.h manje lisekela ama-macro e-FLT_SNAN, DBL_SNAN, kanye ne-LDBL_SNAN, asebenzisa amanani e-NaN asayinwe (okubangela okuhlukile lapho kusetshenziswa emisebenzini yezibalo) ezinhlobo ze-float, double, kanye ne-long double.
- Kulungiswe iphutha lapho izinhlobo ezahlukene ezingaqanjwanga ngamagama zaziphathwa njengezihambisanayo ngaphakathi kweyunithi efanayo yokuhumusha uma zinezinkambu ezifanayo.
- Ifulegi elithi "-MG" elisetshenziswa ukunganaki amafayela ekhanda angekho ngesikhathi sokuskena kokuxhomekeka linwetshiwe laba yiziqondiso "#embed" futhi manje licindezela iphutha elithi "ifayela elingatholakalanga" lapho ifayela elichazwe kusiqondiso "#embed" lingekho.
- Izici ezihlobene ne-C++:
- Ikhono lokusebenzisa izibopho ezihlelekile kumongo we-"constexpr", njengoba kuthuthukiswe ku-C++2c (C++26) specification, lengeziwe. Lokhu kusho ukuthi izinkomba zezinkulumo eziqhubekayo manje zingaba yizinkulumo eziqhubekayo. Usekelo lusetshenziswa kuma-array kanye nezakhiwo ezilula (ama-tuple awasekelwa okwamanje). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Njengoba kudingeka ngokwezinga le-C++20, imikhawulo manje iguqulwa ibe yifomu elijwayelekile ngaphambi kokuba ihlolwe, okuvumela imiyalezo yokuxilonga enembile kakhulu kanye nokuphathwa kahle kwamaphutha okufaka esikhundleni kuma-agumenti ethempulethi asetshenziswa kuphela kuma-concept-id.
- Kungezwe umndeni wemisebenzi eyakhelwe ngaphakathi ethi "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" ukuthola ukuthi ngabe opharetha bokuqhathanisa "<", ">", "<=", kanye"> "" bakhiwe kusukela ku-opharetha ethi "<=>".
- Ipharamitha ethi "-Wincompatible-pointer-types" ishintshiwe ukuze ikhiphe iphutha esikhundleni sesixwayiso. Ukuze ubuyele ekuziphatheni kwangaphambilini, sebenzisa inketho ethi "-Wno-error=incompatible-pointer-types".
- Kwengezwe imisebenzi eyakhelwe ngaphakathi __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, kanye ne-_builtin_dedup_pack. Isibonelo, i-builtin_dedup_pack ikuvumela ukuthi ususe ama-duplicate ohlwini lwezinhlobo: usebenzisa i-MyTypeList = TypeList<__builtin_dedup_pack ...>; // uhlobo oluzovela luzoba yi-TypeList
- Uma kulungiswa ukuziphatha okungachazwanga nge-UBSan (-fsanitize=undefined -fsanitize-trap=undefined), ulwazi lwembangela yamaphutha manje selufakiwe kulwazi lokulungisa amaphutha olukhiqizwe. Ifulegi elithi "-fsanitize-debug-trap-reasons" lingeziwe ukuze licacise izinga lemininingwane kulwazi lwamaphutha. Lingasethwa libe "eyisisekelo" ngezincazelo ezijwayelekile (isb., "Inani eliphelele eligcwalisiwe") kanye nelithi "eliningiliziwe" ukuze lifake ulwazi oluningiliziwe (isb., "inani elisayiniwe eligcwalisiwe lokungezwa kwenani eliphelele ku-'a + b'").
- Kwengezwe amafulegi amasha weqoqo:
- "-f[no-]sanitize-debug-trap-reasons" ukulawula ukuthi izizathu ze-exception trap zifakwe yini kulwazi lokulungisa amaphutha lapho kuhlanganiswa nemodi ethi "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", kanye "-fsanitize-alloc-token-extended" ukuphatha amathokheni okwabiwa kwememori.
- "-fmatrix-memory-layout" ukulawula ukwakheka kwememori kwezinhlobo ze-matrix (isb. ikholomu-enkulu yekholomu-enkulu, umugqa-enkulu yerowu-enkulu).
- Imisebenzi manje inesici esithi "malloc_span", esifana nesici esithi malloc kodwa esisebenza emisebenzini ebuyisela izakhiwo ezifana ne-span eziqukethe inkomba kanye nensimu enosayizi noma inkomba ekugcineni kwebhulokhi.
- Kwengezwe isici esithi "modular_format" ukuze kukhethwe ngokuguquguqukayo ukusetshenziswa okudingekayo okuxhunywe ngokwezibalo komsebenzi we-printf ngesikhathi sesixhumanisi.
- Amathuluzi okuxilonga kanye nokuhlaziya okungaguquki anwetshiwe, kufakwe ukuhlolwa okusha (intuthuko eminingana ehlobene nokuxilonga).
- Izinto ezengeziwe ezingaphakathi kwezandiso ze-SSE, AVX, kanye ne-AVX512 zengezwe ku-backend ye-X86. Izindlela zokwakha zengezwe kuma-Intel CPU asekelwe ku-Wildcat Lake (-march=wildcatlake) kanye ne-Nova Lake (-march=novalake).
- I-backend ye-AArch64 manje isekela i-Ampere Computing Ampere1C (ampere1c), i-Arm C1-Nano (c1-nano), i-Arm C1-Pro (c1-pro), i-Arm C1-Premium (c1-premium), kanye ne-Arm C1-Ultra (c1-ultra). Imisebenzi eyengeziwe eyakhelwe ngaphakathi ingeziwe yemiyalelo ye-FCVTZ[US], i-FCVTN[US], i-FCVTM[US], i-FCVTP[US], kanye ne-FCVTA[US]. Ukusekelwa kwe-Function Multi-Versioning (FMV) kuzinzile. Abasebenzisi manje sebengadlula ukubaluleka kwezinguqulo zomsebenzi ezahlukene.
- Ukusekelwa okwengeziwe kwesakhiwo se-LoongArch32 (LA32R, LA32S).
- Ama-backend athuthukisiwe e-ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, kanye ne-PowerPC architectures.
Source: opennet.ru
