මාස හයක සංවර්ධනයෙන් පසු, LLVM 22.1.0 නිකුත් කර ඇත. එය RISC වැනි අථත්ය උපදෙස් (බහු මට්ටමේ ප්රශස්තිකරණ පද්ධතියක් සහිත පහත් මට්ටමේ අථත්ය යන්ත්රයක්) අතරමැදි බිට් කේතයක් බවට වැඩසටහන් සම්පාදනය කරන මෙවලම් (සම්පාදක, ප්රශස්තිකරණ සහ කේත උත්පාදක) සංවර්ධනය කරයි. ජනනය කරන ලද ව්යාජ කේතය දී ඇති ඉලක්ක වේදිකාවක් සඳහා යන්ත්ර කේතයක් බවට පරිවර්තනය කළ හැකිය, නැතහොත් වැඩසටහන් ක්රියාත්මක කිරීමේදී යන්ත්ර උපදෙස් සෘජුවම ජනනය කිරීම සඳහා ජස්ට්-ඉන්-ටයිම් (JIT) සම්පාදකයක් මඟින් භාවිතා කළ හැකිය. LLVM තාක්ෂණයන් මත පදනම්ව, ව්යාපෘතිය ක්ලැන්ග් සම්පාදකය සංවර්ධනය කරමින්, C, C++ සහ වෛෂයික-C ක්රමලේඛන භාෂා සඳහා සහය දක්වයි. 18.x ශාඛාවෙන් පටන් ගෙන, ව්යාපෘතිය නව අනුවාද අංකකරණ යෝජනා ක්රමයකට මාරු වූ අතර, ඒ අනුව සංවර්ධනය අතරතුර නිකුතුව 0 ("N.0") භාවිතා කරන අතර පළමු ස්ථාවර අනුවාදය "N.1" ලෙස අංකනය කර ඇත.
Clang 22 හි වැඩිදියුණු කිරීම්වලට ඇතුළත් වන්නේ:
- malloc වැනි ශ්රිත භාවිතයෙන් අනන්ය හඳුනාගැනීමක් සමඟ සිදු කරන ලද මතක වෙන් කිරීමේ මෙහෙයුම් සලකුණු කිරීම සඳහා මතක වෙන් කිරීමේ ටෝකන (Allocation Tokens) සඳහා සහය එක් කරන ලදී. වෙන් කිරීමේ ටෝකන මඟින් ගොඩ තොරතුරු ව්යුහගත කිරීමට, මතක කාන්දු හඳුනාගැනීම සරල කිරීමට සහ ඒවායේ අරමුණ හෝ වෙනස් කිරීමේ රටා මත පදනම්ව වස්තූන් කාණ්ඩගත කිරීම සක්රීය කිරීමට ඉඩ සලසයි (උදා: "උණුසුම්" සහ "සීතල" දත්ත වෙන් කිරීම). සක්රීය කිරීමට, "-fsanitize=alloc-token" ධජය භාවිතා කරන්න.
- C භාෂාවට අදාළ විශේෂාංග:
- "defer" delayed execution යාන්ත්රණය නිර්වචනය කරන කෙටුම්පත් පිරිවිතරයක් ක්රියාත්මක කර ඇති අතර, වත්මන් විෂය පථයෙන් පිටවන විට ක්රියා ක්රියාත්මක කිරීමට ඉඩ සලසයි. "defer" සහාය සක්රීය කිරීම සඳහා "-fdefer-ts" ධජය එක් කර ඇත.
- GCC හි සමාන ශ්රිතය පිළිබිඹු කරමින්, __builtin_stack_address() බිල්ට්-ඉන් ශ්රිතය එකතු කර ඇත. මෙම ශ්රිතය __builtin_stack_address() ලෙස හැඳින්වෙන වත්මන් ශ්රිතයේ ස්ටැක් ප්රදේශය වෙන් කරන ස්ටැක් ලිපිනය සහ එය කැඳවන පසුකාලීන ශ්රිත ආපසු ලබා දෙයි.
- අනාගත C2y ප්රමිතිය සඳහා සංවර්ධනය වෙමින් පවතින හැකියාවන්:
- නම් කරන ලද ලූප සඳහා සහය එක් කරන ලද අතර, එමඟින් ඔබට ලූප සඳහා නම් පැවරීමට සහ ප්රකාශ මාරු කිරීමට ඉඩ සලසයි, ඒවා බිඳීම් සහ අඛණ්ඩ ප්රකාශනවල නිශ්චිතව දක්වා ඇති අතර එයින් පිටවිය යුතු ලූපය පැහැදිලිව අර්ථ දැක්විය හැකිය. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
- අනන්ය හඳුනාගැනීමේ නම් ජනනය කිරීම සඳහා නිර්මාණය කර ඇති බිල්ට්-ඉන් "__COUNTER__" මැක්රෝ ක්රියාත්මක කිරීම පුළුල් කර සම්මතයට ඇතුළත් කර ඇත. මෙම මැක්රෝවට ඇමතුම් 2147483647 ක සීමාවක් සකසා ඇත; මෙම සීමාව ඉක්මවා යාම දෝෂයක් ජනනය කරයි.
- "බාහිර පේළිය" ලෙස ප්රකාශ කරන ලද ශ්රිත තුළ ස්ථිතික ශ්රිත හෝ විචල්ය භාවිතා කරන විට (-Wstatic-in-line) අනතුරු ඇඟවීම ඉවත් කරන ලදී.
- C23 C ප්රමිතියේ අර්ථ දක්වා ඇති හැකියාවන්:
- float.h ශීර්ෂ ගොනුව දැන් FLT_SNAN, DBL_SNAN, සහ LDBL_SNAN මැක්රෝ සඳහා සහය දක්වයි, ඒවා float, double සහ long double වර්ග සඳහා signaled (අංක ගණිත මෙහෙයුම් වලදී භාවිතා කරන විට ව්යතිරේකයක් ඇති කරයි) NaN අගයන් ක්රියාත්මක කරයි.
- එකම ක්ෂේත්ර තිබේ නම්, එකම පරිවර්තන ඒකකය තුළ විවිධ නම් නොකළ වර්ග අනුකූල ලෙස සලකනු ලැබූ දෝෂයක් නිරාකරණය කරන ලදී.
- පරායත්තතා ස්කෑන් කිරීමේදී නැතිවූ ශීර්ෂ ගොනු නොසලකා හැරීමට භාවිතා කරන "-MG" ධජය "#embed" විධානයන් දක්වා දීර්ඝ කර ඇති අතර දැන් "#embed" විධානයක නිශ්චිතව දක්වා ඇති ගොනුවක් අස්ථානගත වූ විට "ගොනුව හමු නොවීය" දෝෂය මර්දනය කරයි.
- C++ ආශ්රිත විශේෂාංග:
- C++2c (C++26) පිරිවිතරයේ සංවර්ධනය කර ඇති පරිදි, "constexpr" සන්දර්භය තුළ ව්යුහගත බන්ධන භාවිතා කිරීමේ හැකියාව එකතු කර ඇත. මෙයින් අදහස් කරන්නේ නියත ප්රකාශන සඳහා යොමු කිරීම් දැන් නියත ප්රකාශන විය හැකි බවයි. අරා සහ සරල ව්යුහයන් සඳහා සහාය ක්රියාත්මක කර ඇත (tuples තවමත් සහාය නොදක්වයි). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- C++20 ප්රමිතියට අනුව, දැන් පරීක්ෂා කිරීමට පෙර සීමාවන් සම්මත ස්වරූපයට පරිවර්තනය කර ඇති අතර, සංකල්ප-හැඳුනුම්පත්වල පමණක් භාවිතා කරන සැකිලි තර්කවල වඩාත් නිවැරදි රෝග විනිශ්චය පණිවිඩ සහ ආදේශන දෝෂ නිසි ලෙස හැසිරවීමට ඉඩ සලසයි.
- "<", ">", "<=", සහ ">=" යන සංසන්දන ක්රියාකරුවන් "<=>" ක්රියාකරුගෙන් සංස්ලේෂණය කර ඇත්දැයි සොයා බැලීමට "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" බිල්ට්-ඉන් ශ්රිත පවුලක් එක් කරන ලදී.
- "-Wincompatible-pointer-types" පරාමිතිය අනතුරු ඇඟවීමක් වෙනුවට දෝෂයක් ප්රතිදානය කිරීමට වෙනස් කර ඇත. පෙර හැසිරීමට ආපසු යාමට, "-Wno-error=incompatible-pointer-types" විකල්පය භාවිතා කරන්න.
- __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumn, __builtin_elementwise_maxnumn, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, සහ __builtin_dedup_pack යන බිල්ට්-ඉන් ශ්රිත එකතු කරන ලදී. උදාහරණයක් ලෙස, builtin_dedup_pack මඟින් ඔබට වර්ග ලැයිස්තුවකින් අනුපිටපත් ඉවත් කිරීමට ඉඩ සලසයි: MyTypeList = TypeList<__builtin_dedup_pack භාවිතා කිරීම …>; // ප්රතිඵලය TypeList වර්ගය වනු ඇත
- UBSan (-fsanitize=undefined -fsanitize-trap=undefined) සමඟ නිර්වචනය නොකළ හැසිරීම් නිදොස් කිරීමේදී, දෝෂ හේතු තොරතුරු දැන් ජනනය කරන ලද නිදොස් කිරීමේ තොරතුරුවලට ඇතුළත් කර ඇත. දෝෂ තොරතුරු වල විස්තර මට්ටම නියම කිරීම සඳහා "-fsanitize-debug-trap-reasons" ධජය එකතු කර ඇත. එය සාමාන්ය විස්තර සඳහා "මූලික" ලෙස සැකසිය හැක (උදා: "පූර්ණ සංඛ්යා එකතු කිරීම පිරී ඉතිරී ගියේය") සහ සවිස්තරාත්මක තොරතුරු ඇතුළත් කිරීමට "විස්තරාත්මක" ලෙස සැකසිය හැක (උදා: "'a + b' හි අත්සන් කළ පූර්ණ සංඛ්යා එකතු කිරීම පිටාර ගැලීම").
- නව සම්පාදක කොඩි එක් කරන ලදී:
- "-fsanitize-trap" මාදිලිය සමඟ සම්පාදනය කිරීමේදී නිදොස් කිරීමේ තොරතුරු තුළ ව්යතිරේක උගුල් හේතු ඇතුළත් කර තිබේද යන්න පාලනය කිරීමට "-f[no-]sanitize-debug-trap-reasons".
- මතක වෙන් කිරීමේ ටෝකන කළමනාකරණය කිරීම සඳහා "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", සහ "-fsanitize-alloc-token-extended".
- "-fmatrix-memory-layout" matrix වර්ගවල මතක පිරිසැලසුම පාලනය කිරීමට (උදා: column-major සඳහා column-major, row-major සඳහා row-major).
- ශ්රිතවලට දැන් "malloc_span" ගුණාංගයක් ඇත, එය malloc ගුණාංගයට සමාන නමුත් බ්ලොක් එකේ අවසානයට ප්රමාණය හෝ දර්ශකයක් සහිත දර්ශකයක් සහ ක්ෂේත්රයක් අඩංගු span-සමාන ව්යුහයන් ආපසු ලබා දෙන ශ්රිත සඳහා අදාළ වේ.
- සබැඳි වේලාවේදී printf ශ්රිතයේ අවශ්ය ස්ථිතිකව සම්බන්ධිත ක්රියාත්මක කිරීම ගතිකව තෝරා ගැනීමට "modular_format" ගුණාංගය එක් කරන ලදී.
- රෝග විනිශ්චය සහ ස්ථිතික විශ්ලේෂණ මෙවලම් පුළුල් කර ඇත, නව පරීක්ෂාවන් එකතු කර ඇත (රෝග විනිශ්චය ආශ්රිත වැඩිදියුණු කිරීම් දුසිම් කිහිපයක්).
- SSE, AVX, සහ AVX512 දිගු සඳහා අමතර අභ්යන්තරික X86 පසුබිමට එකතු කර ඇත. Wildcat Lake (-march=wildcatlake) සහ Nova Lake (-march=novalake) ක්ෂුද්ර ගෘහ නිර්මාණ ශිල්පය මත පදනම්ව Intel CPU සඳහා ගොඩනැගීමේ මාතයන් එකතු කර ඇත.
- AArch64 පසුබිම දැන් Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) සහ Arm C1-Ultra (c1-ultra) සකසනයන් සඳහා සහය දක්වයි. FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], සහ FCVTA[US] උපදෙස් සඳහා අමතර බිල්ට්-ඉන් ශ්රිත එකතු කර ඇත. Function Multi-Versioning (FMV) සහාය ස්ථාවර කර ඇත. පරිශීලකයින්ට දැන් විවිධ ශ්රිත අනුවාදවල ප්රමුඛතාවය අභිබවා යා හැක.
- LoongArch32 (LA32R, LA32S) ගෘහ නිර්මාණ ශිල්පය සඳහා සහය එක් කරන ලදී.
- ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, සහ PowerPC ගෘහ නිර්මාණ ශිල්පය සඳහා වැඩිදියුණු කළ පසුපෙළ.
මූලාශ්රය: opennet.ru
