هڪ سال جي ترقي کان پوءِ، مفت GCC ڪمپائلر سوٽ GCC 15.1 جاري ڪيو ويو آهي، نئين GCC 15.x برانچ ۾ پهريون وڏو رليز. رليز نمبرنگ اسڪيم جي مطابق، ورجن 15.0 ڊولپمينٽ دوران استعمال ڪيو ويو، ۽ GCC 15.1 جي رليز کان ٿورو اڳ، GCC 16.0 جي هڪ شاخ اڳ ۾ ئي فورڪ ڪئي وئي هئي، جيڪا ايندڙ وڏي رليز، GCC 16.1 جو بنياد بڻجندي.
مکيه تبديليون:
- سي پروگرامن کي مرتب ڪرڻ وقت، GNU ايڪسٽينشن سان C23 معيار (تبديلي جو خلاصو) ("-std=gnu23") ڊفالٽ طور استعمال ڪيو ويندو آهي. اڳي، C17 معيار ڊفالٽ طور استعمال ڪيو ويندو هو (-std=gnu17). nullptr ڪانسٽنٽ، _BitInt(n) قسم، ۽ bool، true، ۽ false ڪي ورڊز جي شموليت جي ڪري، موجوده منصوبن جي تعمير ۾ تبديلي ممڪن طور تي مسئلا پيدا ڪري سگهي ٿي، جيڪي ايپليڪيشنن ۾ بيان ڪيل ساڳي نالي واري سڃاڻپ ڪندڙن سان تڪرار ڪري سگهن ٿا.
- C23 معيار جون هيٺيون صلاحيتون لاڳو ڪيون ويون آهن:
- "#embed" هدايت بائنري وسيلن کي ڪوڊ ۾ شامل ڪرڻ لاءِ ٺهيل آهي.
- "غير متوازن" خاصيت، جيڪو ظاهر ڪري ٿو ته نتيجو عملدرآمد جي ترتيب تي منحصر ناهي.
- "ٻيهر پيدا ٿيندڙ" خاصيت ظاهر ڪري ٿي ته فنڪشن هميشه ساڳيو نتيجو ڏئي ٿو ساڳيو ان پٽ ڏنو ويو آهي، يعني ٻين عنصرن تي منحصر ناهي.
- مستقبل جي C2Y معيار جا عنصر لاڳو ڪيا ويا آهن (-std=c2y ۽ -std=gnu2y):
- "جيڪڏهن" بيان ۾ متغيرن کي بيان ڪرڻ جي صلاحيت، جهڙوڪ "جيڪڏهن (int x = get ()) {...}".
- ڪوڊ ۾ انهن جو حوالو ڏيڻ لاءِ لوپس جي نالي ڏيڻ جي سپورٽ. ٻاهرين: لاءِ (int i = 0; i < IK; ++ i) { سوئچ (i) { ڪيس 1: بريڪ؛ // CONT1 ڪيس 2 ڏانهن ٽپو ڏئي ٿو: ٻاهريون ڀڃو؛ // CONT2 ڏانهن ٽپو ڏئي ٿو } // CONT1 } // CONT2
- ڪيس ايڪسپريشن ۾ انٽيجر ويليوز جي حدن جي وضاحت لاءِ سپورٽ، جهڙوڪ "ڪيس 1...10:".
- پيچيده انگن ۾ خيالي حصي کي ظاهر ڪرڻ لاءِ "i" ۽ "j" لاحقا استعمال ٿين ٿا.
- پيچيده انگن سان "++" ۽ "—" آپريٽرز استعمال ڪرڻ جو امڪان.
- "_Generic(type, expr1, expr2, …)" اوپيرينڊ قسم جي بنياد تي اظهار چونڊڻ لاءِ ٺهيل آهي.
- ٻين شين جي قسمن وانگر بائيٽ صفن تائين رسائي لاءِ سپورٽ، جهڙوڪ جوڙجڪ ۽ يونين.
- "alignof" آپريٽر کي نامڪمل صفن تي لاڳو ڪرڻ لاءِ سپورٽ (جيڪي سائيز بيان ڪرڻ کان سواءِ اعلان ڪيا ويا آهن، جهڙوڪ "int a[]").
- آڪٽل، هيڪساڊيسيمل، ۽ يونيورسل ڪردار جي فرار جي ترتيبن لاءِ نئون نحو شامل ڪيو ويو. "\u"، "\x" ۽ "\nnn" جي بدران، "\u{}"، "\o{}" ۽ "\x{}" ترتيبون تجويز ڪيون ويون آهن، جن ۾ ڪنهن به عدد کي بيان ڪري سگهجي ٿو.
- بلٽ ان فنڪشن "__builtin_stdc_rotate_left" ۽ "__builtin_stdc_rotate_right".
- NULL پوائنٽرن تي زيرو-لينگٿ آپريشن جي اجازت آهي (مثال طور "sizeof(*p)").
- C++ ٻولي لاءِ فرنٽ اينڊ انهن خاصيتن کي لاڳو ڪري ٿو جيڪي مستقبل جي C++26 معيار لاءِ تيار ڪيون پيون وڃن:
- ويريئيشنل آپريٽر "دوست" ("دوست Ts...").
- ڪمپائل وقت تي ڪنهن شئي کي اڳ ۾ مختص ڪيل ياداشت ۾ رکڻ لاءِ نئين آپريٽر (نئين جاءِ تي) جي تبديلي سان constexpr ڪي ورڊ استعمال ڪرڻ جي صلاحيت.
- هڪ نامڪمل قسم جي پوائنٽر کي حذف ڪرڻ وقت غلطي آئوٽ پُٽ.
- اڳئين ڪاما کان سواءِ ايلپسس سان متغير پيرا ميٽرز جي وضاحت لاءِ نحو (مثال طور، جڏهن "void e(int, …)" جي بدران "void e(int…)" بيان ڪيو وڃي ٿو) کي ختم ڪيو ويو آهي.
- ٽيمپليٽس ۾ پيرا ميٽر پيڪيج کي انڊيڪس ڪرڻ.
- منظم بائنڊنگ لاءِ خاصيتون؛
- نحو '= حذف ڪريو ("سبب")'؛
- بنيادي ڪردار سيٽ ۾ "@"، "$" ۽ "`" جي شموليت.
- ماڊلز کي ظاهر ڪرڻ لاءِ ميڪرو جو استعمال منع ٿيل آهي.
- جيڪڏهن ۽ سوئچ بيانن ۾ هڪ شرط جي طور تي منظم بائنڊنگ استعمال ڪرڻ جي صلاحيت.
- سڌي صف جي مقابلي لاءِ سپورٽ (مثال طور "int arr1[5]; int arr2[5]; bool same = arr1 == arr2") بند ڪئي وئي آهي.
- بائنري وسيلن کي شامل ڪرڻ لاءِ "#embed" ميڪانيزم.
- is_trivial ٽيمپليٽ ڪلاس کي ختم ڪيو ويو آهي.
- شامل ڪيل C++23 خاصيتون:
- "ايڪسپورٽ" هدايت جي ڪجهه استعمالن کي رد ڪريو ۽ "ايڪسپورٽ {}" جي استعمال جي اجازت ڏيو.
- رينجز تي ورجائيندڙ لوپس ۾ عارضي شين جي زندگي وڌائڻ لاءِ سپورٽ.
- libstdc++ لائبريري std ۽ std.compat ماڊلز لاءِ تجرباتي سپورٽ لاڳو ڪري ٿي.
- سي ۽ سي++ ڪوڊ ۾ يونينز لاءِ "{0}" شروعاتي استعمال ڪندڙ هاڻي ضمانت نٿو ڏئي ته سڀئي مواد صاف ٿي ويا آهن، پر ان جي بدران يونين جي پهرين عنصر کي صفر ڪيو ويندو. پوري يونين کي صاف ڪرڻ لاءِ، C23 وضاحت ۾ بيان ڪيل "{}" اظهار استعمال ڪريو، يا پراڻي رويي کي بحال ڪرڻ لاءِ "-fzero-init-padding-bits=unions" آپشن بيان ڪريو.
- گارنٽيڊ ٽيل ڪالز لاءِ "musttail" خاصيت ([[gnu::musttail]] ۽ [[clang::musttail]]) لاءِ لاڳو ڪيل سپورٽ. هي خاصيت ريٽرن اسٽيٽمينٽس تي لاڳو ٿئي ٿي جيڪي موجوده فنڪشن کي ريڪرسيو ڪال ڪن ٿا، ۽ يقيني بڻائي ٿو ته اهڙي ڪال ٽيل ريڪرشن استعمال ڪندي، جيڪا اسٽيڪ تي اضافي ميموري مختص نه ڪندي آهي (تمام وڏي تعداد ۾ ڪالن سان ميموري ختم ٿيڻ جي خطري کي ختم ڪندي).
- flag_enum خاصيت ([[gnu::flag_enum]] ۽ [[clang::flag_enum]]) لاءِ لاڳو ڪيل سپورٽ ڳڻپ تي لاڳو ڪئي وئي ته جيئن اهو ظاهر ٿئي ته مواد بٽ وائيز آپريشنز ۾ استعمال ڪيا ويا آهن (-Wswitch موڊ ۾ ڊيڄاريندڙن کي روڪي ٿو).
- "counted_by" خاصيت لاءِ سپورٽ شامل ڪئي وئي، جيڪا هڪ لچڪدار صف سان هڪ جوڙجڪ ۾ فيلڊ کي بيان ڪرڻ لاءِ استعمال ڪري سگهجي ٿي جيڪا عنصرن جي تعداد کي طئي ڪري ٿي. خاصيت کي بفر اوور فلو چيڪن جي ڪارڪردگي کي بهتر بڻائڻ لاءِ استعمال ڪري سگهجي ٿو.
- فنڪشنز ۾ "nonnull_if_nonzero" وصف شامل ڪئي وئي، جيڪا وضاحت ڪري ٿي ته پوائنٽرز سان گڏ ڪجهه فنڪشن پيرا ميٽر صرف تڏهن ئي NULL ٿي سگهن ٿا جڏهن ٻيو پيرا ميٽر صفر هجي.
- "asm(….)" جي ٻاهرين ڪمن کي ان لائن ڪرڻ لاءِ وڌايل اسمبلر جي اجازت آهي. اسمبلر انسرٽس ۾، ان کي اسٽيڪ جي ريڊ زون (اسٽيڪ جي چوٽيءَ تي علائقو) ۾ ميموري کي اوور رائٽ ڪرڻ جي اجازت آهي.
- بهتر ٽيمپليٽ هيشنگ جي ڪري C++ ڪوڊ جي گڏ ڪرڻ تيز آهي.
- نئين اصلاح شامل ڪئي وئي. ویکٹرائيزنگ لوپس لاءِ سپورٽ لاڳو ڪئي وئي آهي جن ۾ ابتدائي نڪرڻ لاءِ ڪوڊ شامل آهي (مثال طور، وقفو يا واپسي ڪال ذريعي)، جيتوڻيڪ اهڙا لوپس متحرڪ طور تي مختص ڪيل صفن يا بفرن کي هٿي وٺرائين ٿا جن جي سائيز مرتب وقت تي نامعلوم آهي. جڏهن -O2 آپشن بيان ڪيو ويندو آهي، ته ڪجهه آساني سان ویکٹرائيز ٿيندڙ لوپس جي ویکٹرائيزيشن جن لاءِ ٽرپ ڪائونٽ معلومات موجود ناهي، فعال ڪئي ويندي آهي.
- لنڪنگ اسٽيج (LTO، لنڪ-ٽائيم آپٽمائيزيشن) تي انڪريمينٽل آپٽمائيزيشن موڊ شامل ڪيو ويو، جيڪو LTO استعمال ڪندي انهن حالتن ۾ ٻيهر ڪمپليشن وقت کي گهٽائي ٿو جتي ڪوڊ ۾ معمولي تبديليون ڪيون ويون آهن (هڪ فنڪشن ايڊٽ ڪيو ويو آهي). انڪريمينٽل موڊ کي فعال ڪرڻ لاءِ، "-flto-incremental" آپشن تجويز ڪيو ويو آهي.
- تمام وڏين ان پٽ فائلن جي بهتر تاليف. 4096 کان وڌيڪ ڪالمن نمبرن جي ٽريڪنگ لاڳو ڪئي وئي. تمام وڏين فائلن ۾ غلطين ۽ ڊيڄاريندڙن جي جڳھ جي نشاندهي ڪرڻ جي بهتر درستگي.
- مسئلن جي تشخيص ڪرڻ وقت رپورٽن جي بهتر نمائش. مثال طور، مسئلي جي جڳھ کي "⚠️" علامت سان نمايان ڪيو ويو آهي، C++ ٽيمپليٽس ۾ غلطين لاءِ آئوٽ پُٽ جو لي آئوٽ تبديل ڪيو ويو آهي، C23 معيار ڏانهن منتقلي کي آسان بڻائڻ لاءِ اشارا شامل ڪيا ويا آهن، ۽ رنگ اسڪيم کي ٻيهر ڊزائين ڪيو ويو آهي. صارف فارميٽ ۾ تشخيص کي آئوٽ پُٽ ڪرڻ جي صلاحيت شامل ڪئي وئي (-fdiagnostics-format=sarif-file).
- libgdiagnostics لائبريري لاڳو ڪئي وئي آهي، جيڪا توهان کي توهان جي منصوبن ۾ تشخيصي پيغامن جي ڊيزائن سان لاڳاپيل GCC صلاحيتن کي ضم ڪرڻ جي اجازت ڏئي ٿي (مثال طور، توهان ڪوٽنگ، نمايان ڪرڻ، ۽ اصلاح جا اشارا استعمال ڪري سگهو ٿا).
- لائينن جي آخر ۾ باقي بچيل وائيٽ اسپيس ۽ لائينن جي شروعات ۾ اضافي وائيٽ اسپيس کي ڳولڻ لاءِ "-Wtrailing-whitespace" ۽ "-Wleading-whitespace" وارننگون شامل ڪيون ويون.
- هيڊر گارڊ ميڪروز ۾ مسئلن جي رپورٽ ڪرڻ لاءِ "-ويڊر-گارڊ" وارننگ شامل ڪئي وئي آهي جيڪي هيڊر فائل کي ٻيهر شامل ٿيڻ کان روڪين ٿا.
- ڊي ٻولي لاءِ فرنٽ اينڊ ورجن 2.111.0 تائين اپڊيٽ ڪيو ويو آهي.
- فورٽران فرنٽ اينڊ ۾ غير دستخط ٿيل انٽيجرز لاءِ سپورٽ شامل ڪئي وئي آهي.
- پيڪيج ۾ COBOL ٻولي، gcobol لاءِ هڪ ڪمپائلر شامل آهي، جيڪو x86-64 ۽ AArch64 پليٽ فارمن کي سپورٽ ڪري ٿو ۽ 32-bit سسٽم تي استعمال لاءِ ٺهيل ناهي. ڪمپائلر ISO/IEC 1989:2023 وضاحتن کي لاڳو ڪري ٿو ۽ NIST CCVS/85 جي گھڻن ٽيسٽن کي پاس ڪري ٿو.
- اوپن ايم پي 5.0، 5.1، 5.2 ۽ 6.0 (اوپن ملٽي پروسيسنگ) معيارن جو نفاذ، ملٽي ڪور ۽ هائبرڊ (سي پي يو + جي پي يو / ڊي ايس پي) سسٽم تي شيئرڊ ميموري ۽ ویکٹرائيزيشن يونٽس (SIMD) سان متوازي پروگرامنگ طريقن کي لاڳو ڪرڻ لاءِ API ۽ طريقن جي وضاحت ڪندي، جاري رکيو ويو آهي. ميٽا ڊائريڪٽيو ۽ ٽائل، انرول، انٽراپ ۽ ڊسپيچ ڪنسٽرڪٽس لاءِ سپورٽ شامل ڪئي وئي. ڪجھ AMD ۽ NVIDIA GPUs لاءِ، متحد شيئرڊ ميموري لاءِ سپورٽ شامل ڪئي وئي آهي ("ضرورت" هدايت ۾ unified_shared_memory کي بيان ڪندي فعال ڪيو ويو آهي). "self_maps" اظهار لاءِ سپورٽ شامل ڪئي وئي.
- AArch64 آرڪيٽيڪچر لاءِ بيڪ اينڊ کي MinGW پليٽ فارم (aarch64-w64-mingw32) کي سپورٽ ڪرڻ لاءِ اپڊيٽ ڪيو ويو آهي. 20 کان وڌيڪ ARM8 ايڪسٽينشن لاڳو ڪيا ويا آهن ۽ ACLE (آرم سي لئنگئيج ايڪسٽينشن) ايڪسٽينشن لاءِ سپورٽ کي بهتر بڻايو ويو آهي. ڪوڊ جنريٽر ۾ ڪيتريون ئي بهتريون ڪيون ويون آهن. شامل ڪيل سي پي يو سپورٽ:
- ايپل اي 12 (ايپل-اي 12)
- ايپل ايم 1 (ايپل-ايم 1)
- ايپل ايم 2 (ايپل-ايم 2)
- ايپل ايم 3 (ايپل-ايم 3)
- آرم ڪارٽيڪس-A520AE (ڪارٽيڪس-a520ae)
- آرم ڪارٽيڪس-A720AE (ڪارٽيڪس-a720ae)
- آرم ڪارٽيڪس-A725 (ڪارٽيڪس-a725)
- آرم ڪارٽيڪس-R82AE (ڪارٽيڪس-r82ae)
- آرم ڪارٽيڪس-X925 (ڪارٽيڪس-x925)
- آرم نيوورس اين 3 (نيوورس-اين 3)
- آرم نيوورس وي 3 (نيوورس-وي 3)
- بازو Neoverse V3AE (neoverse-v3ae)
- FUJITSU-MONAKA (fujitsu-monaka)
- اين وي ڊي اي اي گريس
- اين وي آءِ ڊي اي اولمپس (اولمپس)
- ڪوالڪوم اوريون-1 (اوريون-1)
- AMD Radeon GPU (GCN) ڪوڊ جنريشن بيڪ اينڊ کي libstdc++ لائبريري کي سپورٽ ڪرڻ لاءِ اپڊيٽ ڪيو ويو آهي ۽ gfx9-generic، gfx10-3-generic، ۽ gfx11-generic ڊوائيس سيريز لاءِ تجرباتي ڪوڊ جنريشن سپورٽ شامل ڪئي وئي آهي.
- x86 بيڪ اينڊ هاڻي انٽيل انسٽرڪشن سيٽ آرڪيٽيڪچر ايڪسٽينشنز AVX10.2، AMX-AVX512، AMX-FP8، AMX-MOVRS، AMX-TF32، AMX-TRANSPOSE، MOVRS کي سپورٽ ڪري ٿو. انٽيل ڊائمنڊ ريپڊس ۽ زين فائي سي پي يوز لاءِ سپورٽ شامل ڪئي وئي.
- لونگ آرچ ۽ اي وي آر پليٽ فارمن لاءِ وڌايل بيڪ اينڊ صلاحيتون.
- Nios II پروسيسرز ۾ استعمال ٿيندڙ nios2 ٽارگيٽ آرڪيٽيڪچر لاءِ سپورٽ ختم ڪئي وئي. AArch32 پورٽ ۾ ILP32 ABI (-mabi=ilp64) لاءِ سپورٽ ختم ڪئي وئي آهي ۽ ايندڙ وڏي رليز ۾ ختم ڪئي ويندي.
جو ذريعو: opennet.ru
