ڇهن مهينن جي ترقي کان پوءِ، LLVM 22.1.0 جاري ڪيو ويو آهي. اهو اوزار (ڪمپائلر، آپٽمائيزر، ۽ ڪوڊ جنريٽر) تيار ڪري ٿو جيڪي پروگرامن کي RISC جهڙي ورچوئل هدايتن جي وچولي بٽ ڪوڊ ۾ مرتب ڪن ٿا (هڪ گهٽ سطحي ورچوئل مشين جنهن ۾ هڪ گھڻ-سطح جي اصلاح جو نظام آهي). پيدا ٿيل سيوڊو ڪوڊ کي ڏنل ٽارگيٽ پليٽ فارم لاءِ مشين ڪوڊ ۾ تبديل ڪري سگهجي ٿو يا پروگرام جي عمل درآمد دوران سڌو سنئون مشين هدايتون پيدا ڪرڻ لاءِ صرف ان وقت (JIT) ڪمپائلر پاران استعمال ڪري سگهجي ٿو. LLVM ٽيڪنالاجي جي بنياد تي، پروجيڪٽ Clang ڪمپائلر تيار ڪري رهيو آهي، جيڪو C، C++، ۽ Objective-C پروگرامنگ ٻولين کي سپورٽ ڪري ٿو. 18.x برانچ سان شروع ڪندي، پروجيڪٽ هڪ نئين ورزن نمبرنگ اسڪيم ڏانهن تبديل ڪيو ويو، جنهن جي مطابق رليز 0 ("N.0") ترقي دوران استعمال ڪيو ويندو آهي، ۽ پهرين مستحڪم ورزن کي "N.1" نمبر ڏنو ويندو آهي.
Clang 22 ۾ بهتري شامل آهن:
- ميموري مختص ٽوڪن (الوڪيشن ٽوڪن) لاءِ سپورٽ شامل ڪئي وئي آهي ته جيئن ميموري مختص آپريشن کي نشان لڳايو وڃي جيڪي هڪ منفرد سڃاڻپ ڪندڙ سان malloc جهڙن ڪمن کي استعمال ڪندي ڪيا وڃن. الاوڪيشن ٽوڪن هيپ معلومات کي ترتيب ڏيڻ، ميموري ليڪ جي ڳولا کي آسان بڻائڻ، ۽ انهن جي مقصد يا ترميم جي نمونن جي بنياد تي شين جي گروپنگ کي فعال ڪرڻ جي اجازت ڏين ٿا (مثال طور، "گرم" کي "ٿڌي" ڊيٽا کان الڳ ڪرڻ). فعال ڪرڻ لاءِ، "-fsanitize=alloc-token" پرچم استعمال ڪريو.
- سي ٻولي سان لاڳاپيل خاصيتون:
- "ڊيفر" ڊيفرڊ ايگزيڪيوشن ميڪانيزم جي وضاحت ڪندڙ هڪ مسودو وضاحت لاڳو ڪئي وئي آهي، جيڪا موجوده دائري مان نڪرڻ تي عملن کي عمل ۾ آڻڻ جي اجازت ڏئي ٿي. "ڊيفر" سپورٽ کي فعال ڪرڻ لاءِ "-fdefer-ts" پرچم شامل ڪيو ويو آهي.
- بلٽ ان فنڪشن __builtin_stack_address() شامل ڪيو ويو آهي، جيڪو GCC ۾ ساڳئي فنڪشن کي ظاهر ڪري ٿو. هي فنڪشن اسٽيڪ ايڊريس واپس ڪري ٿو جيڪو موجوده فنڪشن جي اسٽيڪ ايريا کي الڳ ڪري ٿو جنهن کي __builtin_stack_address() سڏيو ويندو آهي ۽ ان کان پوءِ جا فنڪشن جيڪي اهو سڏين ٿا.
- مستقبل جي C2y معيار لاءِ صلاحيتون تيار ڪيون پيون وڃن:
- نامزد ٿيل لوپس لاءِ سپورٽ شامل ڪئي وئي آهي، جيڪا توهان کي لوپس کي نالا تفويض ڪرڻ ۽ بيانن کي سوئچ ڪرڻ جي اجازت ڏئي ٿي، جيڪي بريڪ ۽ جاري بيانن ۾ بيان ڪري سگھجن ٿا ته جيئن لوپ کي واضح طور تي بيان ڪري سگهجي جنهن مان نڪرڻو آهي. 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 }
- بلٽ ان "__COUNTER__" ميڪرو جي نفاذ، جيڪو منفرد سڃاڻپ ڪندڙ نالا پيدا ڪرڻ لاءِ ٺاهيو ويو آهي، کي وڌايو ويو آهي ۽ معيار ۾ شامل ڪيو ويو آهي. هن ميڪرو ڏانهن 2147483647 ڪالن جي حد مقرر ڪئي وئي آهي؛ هن حد کان وڌيڪ ڪرڻ سان هڪ غلطي پيدا ٿيندي.
- "extern inline" طور اعلان ڪيل فنڪشن اندر جامد افعال يا متغير استعمال ڪرڻ وقت خبرداري (-Wstatic-in-inline) کي هٽايو ويو.
- C23 C معيار ۾ بيان ڪيل صلاحيتون:
- float.h هيڊر فائل هاڻي FLT_SNAN، DBL_SNAN، ۽ LDBL_SNAN ميڪروز کي سپورٽ ڪري ٿي، جيڪي فلوٽ، ڊبل، ۽ لانگ ڊبل قسمن لاءِ سگنل ٿيل (رياضياتي عملن ۾ استعمال ٿيڻ تي استثنا پيدا ڪن ٿا) NaN قدر لاڳو ڪن ٿا.
- هڪ بگ کي درست ڪيو ويو جتي مختلف بي نام قسمن کي ساڳئي ترجمي يونٽ اندر مطابقت رکندڙ سمجهيو ويندو هو جيڪڏهن انهن وٽ ساڳيا فيلڊ هئا.
- انحصار اسڪيننگ دوران گم ٿيل هيڊر فائلن کي نظرانداز ڪرڻ لاءِ استعمال ٿيندڙ "-MG" جھنڊو "#embed" ھدايتن تائين وڌايو ويو آھي ۽ ھاڻي "#embed" ھدايت ۾ بيان ڪيل فائل غائب ٿيڻ تي "فائل نه مليو" غلطي کي دٻائي ٿو.
- سي++ سان لاڳاپيل خاصيتون:
- "constexpr" تناظر ۾ منظم بائنڊنگ استعمال ڪرڻ جي صلاحيت، جيئن C++2c (C++26) وضاحت ۾ ترقي ڪئي وئي آهي، شامل ڪئي وئي آهي. ان جو مطلب آهي ته مسلسل اظهار جا حوالا هاڻي پاڻ ۾ مسلسل اظهار ٿي سگهن ٿا. سپورٽ صفن ۽ سادي جوڙجڪ لاءِ لاڳو ڪئي وئي آهي (ٽيپل اڃا تائين سپورٽ نه ڪيا ويا آهن). 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_minnumnum، __builtin_elementwise_maxnumnum، __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' ۾ دستخط ٿيل انٽيجر اضافو اوور فلو").
- شامل ڪيو ويو نئون مرتب ڪندڙ جھنڊو:
- "-f[no-]sanitize-debug-trap-reasons" اهو ڪنٽرول ڪرڻ لاءِ ته ڇا استثنا ٽريپ جا سبب ڊيبگ معلومات ۾ شامل ڪيا ويا آهن جڏهن "-fsanitize-trap" موڊ سان گڏ ڪيو ويندو آهي.
- "-fsanitize=alloc-token"، "-falloc-token-max"، "-fsanitize-alloc-token-fast-abi"، ۽ "-fsanitize-alloc-token-extended" ميموري مختص ٽوڪن کي منظم ڪرڻ لاءِ.
- "-fmatrix-memory-layout" ميٽرڪس قسمن جي ميموري لي آئوٽ کي ڪنٽرول ڪرڻ لاءِ (مثال طور، ڪالم-ميجر لاءِ ڪالم-ميجر، رو-ميجر لاءِ رو-ميجر).
- فنڪشنز ۾ هاڻي هڪ "malloc_span" خاصيت آهي، جيڪا malloc خاصيت سان ملندڙ جلندڙ آهي پر انهن فنڪشنز تي لاڳو ٿئي ٿي جيڪي اسپان جهڙيون بناوتون واپس ڪن ٿا جن ۾ پوائنٽر ۽ فيلڊ سائيز يا پوائنٽر سان بلاڪ جي آخر تائين شامل آهن.
- لنڪ وقت تي printf فنڪشن جي گهربل جامد طور تي ڳنڍيل عملدرآمد کي متحرڪ طور تي چونڊڻ لاءِ "modular_format" خاصيت شامل ڪئي وئي.
- تشخيصي ۽ جامد تجزيي جا اوزار وڌايا ويا آهن، نوان چيڪ شامل ڪيا ويا آهن (ڪيترائي درجن تشخيصي سان لاڳاپيل بهتري).
- X86 بيڪ اينڊ ۾ SSE، AVX، ۽ AVX512 ايڪسٽينشن لاءِ اضافي اندروني شيون شامل ڪيون ويون آهن. وائلڊ ڪيٽ ڍنڍ (-مارچ=وائلڊ ڪيٽ ڍنڍ) ۽ نووا ڍنڍ (-مارچ=نووالاڪ) مائڪرو آرڪيٽيڪچر جي بنياد تي انٽيل سي پي يوز لاءِ بلڊ موڊ شامل ڪيا ويا آهن.
- AArch64 بيڪ اينڊ هاڻي ايمپيئر ڪمپيوٽنگ ايمپيئر 1 سي (ايمپيئر 1 سي)، آرم سي 1-نانو (سي 1-نانو)، آرم سي 1-پرو (سي 1-پرو)، آرم سي 1-پريميئم (سي 1-پريميئم)، ۽ آرم سي 1-الٽرا (سي 1-الٽرا) پروسيسرز کي سپورٽ ڪري ٿو. FCVTZ[US]، FCVTN[US]، FCVTM[US]، FCVTP[US]، ۽ FCVTA[US] هدايتن لاءِ اضافي بلٽ ان فنڪشن شامل ڪيا ويا آهن. فنڪشن ملٽي ورزننگ (FMV) سپورٽ کي مستحڪم ڪيو ويو آهي. استعمال ڪندڙ هاڻي مختلف فنڪشن ورزن جي ترجيح کي اوور رائڊ ڪري سگهن ٿا.
- LoongArch32 (LA32R، LA32S) آرڪيٽيڪچر لاءِ سپورٽ شامل ڪئي وئي.
- ARM، AMDGPU، RISC-V، LoongArch64، MIPS، WebAssembly، ۽ PowerPC آرڪيٽيڪچر لاءِ بهتر بيڪ اينڊ.
جو ذريعو: opennet.ru
