LLVM 16.0 گڏ ڪرڻ وارو سوٽ ڇڏڻ

ڇهن مهينن جي ترقيءَ کان پوءِ، LLVM 16.0 پروجيڪٽ جو رليز پيش ڪيو ويو - هڪ GCC-مطابقت رکندڙ ٽول ڪٽ (ڪمپائلر، آپٽمائيزر ۽ ڪوڊ جنريٽر) جيڪو پروگرامن کي RISC-جهڙي ورچوئل هدايتن جي وچ واري بٽ ڪوڊ ۾ گڏ ڪري ٿو (هڪ گهٽ-سطح واري ورچوئل مشين سان. گھڻ-سطح اصلاحي نظام). ٺاهيل pseudocode کي JIT ڪمپيلر استعمال ڪندي مشين جي هدايتن ۾ سڌو سنئون پروگرام جي عمل جي وقت ۾ تبديل ڪري سگھجي ٿو.

Clang 16.0 ۾ اهم سڌارا:

  • ڊفالٽ C++/ObjC++ معيار آهي gnu++17 (اڳوڻي gnu++14) جنهن جو مطلب آهي C++17 خاصيتون GNU ايڪسٽينشن سان ڊفالٽ جي مدد سان آهن. پوئين رويي کي واپس ڪرڻ لاء، توھان استعمال ڪري سگھو ٿا "-std=gnu++14" اختيار.
  • C++ 20 معيار سان لاڳاپيل ترقي يافته خاصيتون لاڳو ڪيون ويون آهن:
    • مشروط طور تي ننڍا ننڍا خاص ميمبر افعال،
    • ليمبڊا افعال ۾ منظم ٿيل پابندن کي پڪڙڻ،
    • هڪجهڙائي آپريٽر اندر اظهار،
    • ڪجھ حوالن ۾ ٽائيپ نالو لفظ کي ختم ڪرڻ جو اختيار،
    • قوس ۾ صحيح مجموعي شروعات (“Aggr(val1, val2)”).
  • مستقبل ۾ بيان ڪيل خاصيتون C ++ 2b معيار لاڳو ڪيا ويا آهن:
    • اهو اجازت آهي ته مرڪب اظهار جي آخر ۾ ليبل لڳائڻ،
    • جامد آپريٽر(),
    • جامد آپريٽر[],
    • چار8_t قسم سان مطابقت کي يقيني بڻايو وڃي ٿو،
    • "\N{...}" ۾ استعمال لاءِ اجازت ڏنل اکرن جو دائرو وڌايو ويو آهي
    • شامل ڪيل متغير استعمال ڪرڻ جي صلاحيت شامل ڪئي وئي "static constexpr" جي طور تي اعلان ڪيل افعال ۾ constexpr طور اعلان ڪيو ويو.
  • مستقبل ۾ بيان ڪيل خاصيتون C-standard C2x لاڳو ڪيا ويا آهن:
    • "-Wunused-label" وارننگ کي غير فعال ڪرڻ لاءِ، "[[شايد_unused_unused]]" وصف کي ليبل تي لاڳو ڪرڻ جي اجازت آهي
    • اهو اجازت آهي ته ليبل ڪٿي به مرڪب اظهار جي اندر اندر،
    • شامل ڪيو ويو typeof ۽ typeof_unqual آپريٽرز،
    • هڪ نئون قسم nullptr_t ۽ هڪ nullptr مسلسل null پوائنٽرز کي بيان ڪرڻ لاءِ جيڪي ڪنهن به پوائنٽر جي قسم ۾ تبديل ڪري سگھن ٿا ۽ NULL جي مختلف قسم جي نمائندگي ڪري ٿو جيڪو انٽيجر ۽ void* قسمن سان پابند نه آهي.
    • C2x موڊ ۾، va_start ميڪرو کي ڪال ڪرڻ جي اجازت آھي دليلن جي متغير تعداد (متغير) سان.
  • C99، C11، ۽ C17 تعميل جي طريقن ۾، ڊفالٽ آپشنز "-Wimplicit-function-declaration" ۽ "-Wimplicit-int" ھاڻي ھڪ ڊيڄاريندڙ بدران نقص پيدا ڪن ٿا.
  • C++ موڊ ۾ "void *" (مثال طور "void func(void *p) { *p; }") جو اڻ سڌي طرح استعمال هاڻي هڪ نقص پيدا ڪري ٿو، جهڙو ISO C++، GCC، ICC ۽ MSVC.
  • بٽ فيلڊز کي هدايتڪاري جي طور تي بيان ڪرڻ (مثال طور "__asm ​​{ mov eax, s.bf }") Microsoft طرز جي ان لائن اسيمبلي بلاڪ ۾ هاڻي هڪ غلطي پيدا ڪري ٿي.
  • شامل ڪيل تشخيص مختلف ماڊلز ۾ ساڳين نالن سان مختلف جوڙجڪ ۽ اتحادين جي موجودگي لاء.
  • OpenCL ۽ OpenMP سپورٽ سان لاڳاپيل صلاحيتون وڌايو ويو آھي. OpenCL ڪنيل دليلن ۾ استعمال ٿيل C++ ٽيمپليٽ لاءِ بهتر تشخيص. AMDGPU لاءِ بهتر قطار بلاڪ سپورٽ. nounwind وصف واضح طور تي سڀني ڪمن ۾ شامل ڪيو ويو آهي. تعمير ٿيل افعال لاء بهتر سپورٽ.
  • ڊاريڪٽري کي بيان ڪرڻ لاء CLANG_CRASH_DIAGNOSTICS_DIR ماحوليات استعمال ڪرڻ جي صلاحيت شامل ڪئي وئي جنهن ۾ حادثي جي تشخيص واري ڊيٽا محفوظ ڪئي وئي آهي.
  • يونيڪوڊ سپورٽ يونيڪوڊ 15.0 وضاحتن کي اپڊيٽ ڪيو ويو آهي. ڪجھ رياضياتي نشانين جي سڃاڻپ ڪندڙ ۾ اجازت ڏني وئي آهي، جهڙوڪ "₊" (مثال طور "ڊبل xₖ₊₁").
  • گھڻن ڪنفيگريشن فائلن کي لوڊ ڪرڻ لاءِ سپورٽ شامل ڪئي وئي (ڊفالٽ ڪنفيگريشن فائلون پھريون لوڊ ڪيون وينديون آھن، ۽ پوءِ جيڪي بيان ڪيون وينديون آھن ”--config=“ جھنڊو، جن کي ھاڻي ڪيترائي ڀيرا بيان ڪري سگھجي ٿو). ترتيب ڏنل فائلن جي ڊفالٽ لوڊ ڪرڻ واري ترتيب کي تبديل ڪيو: ڪلنگ پهرين فائل کي لوڊ ڪرڻ جي ڪوشش ڪري ٿو - .cfg، ۽ جيڪڏهن اهو نه مليو ته اهو ٻه فائلون لوڊ ڪرڻ جي ڪوشش ڪري ٿو .cfg ۽ .cfg. ڊفالٽ جي ترتيب واري فائلن کي لوڊ ڪرڻ کي غير فعال ڪرڻ لاء، "--no-default-config" پرچم شامل ڪيو ويو آهي.
  • ورجائي لائق ٺاھن کي يقيني بڻائڻ لاءِ، __DATE__، __TIME__ ۽ __TIMESTAMP__ ۾ موجوده تاريخ ۽ وقت جي قدرن کي مٽائڻ ممڪن آھي SOURCE_DATE_EPOCH ماحوليات ۾ بيان ڪيل وقت سان.
  • بلٽ ان فنڪشنز جي موجودگي کي جانچڻ لاءِ (بلٽٽن) جيڪي مستقل جي حوالي سان استعمال ڪري سگھجن ٿا، ميڪرو "__has_constexpr_builtin" شامل ڪيو ويو آهي.
  • شامل ڪيو ويو نئون تاليف پرچم "-fcoro-aligned-alocation" ترتيب ڏنل ڪوروٽين فريم مختص ڪرڻ لاءِ.
  • "-fstrict-flex-arrays=" جھنڊو ڍانچي ۾ لچڪدار صفن جي عناصر جي چڪاس جي ٽئين سطح لاءِ سپورٽ لاڳو ڪري ٿو (لچڪدار صف جا ميمبر، ساخت جي آخر ۾ اڻڄاتل سائيز جي صف). ٽئين سطح تي، صرف سائيز "[]" (مثال طور، "int b[]") کي لچڪدار صف طور سمجهيو ويندو آهي، پر سائيز "[0]" (مثال طور، "int b[0]") نه آهي.
  • شامل ڪيو ويو "-fmodule-output" پرچم معياري C++ ماڊلز لاءِ سنگل فيز ڪمپليشن ماڊل کي فعال ڪرڻ لاءِ.
  • شامل ڪيو ويو "-Rpass-analysis=stack-frame-layout" موڊ اسٽيڪ فريم ترتيب سان مسئلن جي تشخيص ۾ مدد لاء.
  • هڪ نئون وصف __attribute__((target_version("cpu_features"))) شامل ڪيو ۽ AArch1 پاران مهيا ڪيل خاصيتن جي مخصوص ورزن کي چونڊڻ لاءِ خصوصيت __attribute__((target_clones("cpu_features2","cpu_features64",...))) جي ڪارڪردگي کي وڌايو سي پي يوز.
  • تشخيصي اوزار وڌايو ويو:
    • شامل ٿيل ڊيڄاريندڙ "-Wsingle-bit-bitfield-constant-conversion" ۾ شامل ٿيل ڇنڊڇاڻ کي معلوم ڪرڻ لاءِ جڏهن هڪ کي تفويض ڪيو وڃي هڪ واحد-bit سائن ٿيل بٽ فيلڊ کي.
    • اڻڄاتل constexpr متغير جي تشخيص کي وڌايو ويو آهي.
    • شامل ڪيو ويو "-Wcast-function-type-strict" ۽ "-Wincompatible-function-pointer-types-strict" ڊيڄاريندڙ فنڪشن قسم ڪاسٽنگ سان امڪاني مسئلن جي نشاندهي ڪرڻ لاء.
    • ايڪسپورٽ بلاڪ ۾ غلط يا محفوظ ڪيل ماڊل جا نالا استعمال ڪرڻ لاء تشخيص شامل ڪيا ويا.
    • وصفن ۾ گم ٿيل "خودڪار" لفظن جي بهتر ڳولا.
    • "-ونٽيگر-اوور فلو" ڊيڄاريندڙ تي عملدرآمد اضافي حالتن لاءِ چيڪ شامل ڪيو آهي جيڪي اوور فلو جو سبب بڻجن ٿا.
  • LoongArch هدايتون سيٽ آرڪيٽيڪچر لاءِ سپورٽ (-march=loongarch64 or -march=la464)، Loongson 3 5000 پروسيسرز ۾ استعمال ٿيل ۽ نئين RISC ISA کي لاڳو ڪرڻ، MIPS ۽ RISC-V وانگر، لاڳو ڪيو ويو آهي.

LLVM 16.0 ۾ اهم جدت:

  • LLVM ڪوڊ کي C++ 17 معيار ۾ بيان ڪيل عناصر استعمال ڪرڻ جي اجازت آهي.
  • LLVM تعمير ڪرڻ لاء ماحولياتي گهرجون وڌايو ويو آهي. تعميراتي اوزار کي ھاڻي C ++ 17 معيار جي حمايت ڪرڻ گھرجي، يعني. تعمير ڪرڻ لاء، توهان کي گهٽ ۾ گهٽ جي ضرورت آهي GCC 7.1، ڪلانگ 5.0، ايپل ڪلنگ 10.0 يا Visual Studio 2019 16.7.
  • AArch64 آرڪيٽيڪچر لاءِ پسمنظر Cortex-A715، Cortex-X3 ۽ Neoverse V2 CPUs لاءِ سپورٽ شامل ڪري ٿو، RME MEC (ميموري انڪريپشن ڪنٽيڪٽس)، Armv8.3 ايڪسٽينشن (ڪمپليڪس نمبر) ۽ فنڪشن ملٽي ورشننگ لاءِ اسمبلر.
  • ARM فن تعمير جي پس منظر ۾، Armv2، Armv2A، Armv3 ۽ Armv3M ٽارگيٽ پليٽ فارمن جي سپورٽ کي بند ڪيو ويو آھي، جنھن لاءِ صحيح ڪوڊ جي نسل جي ضمانت نه ھئي. پيچيده نمبرن سان ڪم ڪرڻ جي هدايتن لاءِ ڪوڊ ٺاهڻ جي صلاحيت شامل ڪئي وئي.
  • X86 آرڪيٽيڪچر جي پسمنظر ۾ هدايتون سيٽ آرڪيٽيڪچرز (ISAs) AMX-FP16، CMPCCXADD، AVX-IFMA، AVX-VNNI-INT8، AVX-NE-CONVERT لاءِ سپورٽ شامل ڪئي وئي آهي. RDMSRLIST، RMSRLIST ۽ WRMSRNS هدايتون لاءِ سپورٽ شامل ڪئي وئي. لاڳو ٿيل اختيارن "-mcpu=raptorlake"، "-mcpu=meteorlake"، "-mcpu=emeraldrapids"، "-mcpu=sierraforest"، "-mcpu=graniterapids" ۽ "-mcpu=grandridge"
  • LoongArch پليٽ فارم لاءِ سرڪاري مدد شامل ڪئي وئي.
  • MIPS، PowerPC ۽ RISC-V آرڪيٽيڪچرز لاءِ بهتر پس منظر
  • LLDB ڊيبگر کي LoongArch آرڪيٽيڪچر لاءِ 64-bit executables کي ڊيبگ ڪرڻ لاءِ سپورٽ شامل ڪئي وئي. COFF ڊيبگ علامتن جي بهتر سنڀال. لوڊ ٿيل ونڊوز ماڊلز جي لسٽ ۾ نقل ڪيل ڊي ايل ايل جي فلٽرنگ مهيا ڪئي وئي.
  • Libc++ لائبريري ۾، مکيه ڪم C++ 20 ۽ C++ 23 معيارن جي نئين خاصيتن لاءِ سپورٽ لاڳو ڪرڻ تي مرکوز هو.
  • LDD لنڪر خاص طور تي ڳنڍڻ واري وقت کي گھٽائي ٿو متوازي پتي جي منتقلي اسڪيننگ ۽ سيڪشن شروعاتي عملن کي. ZSTD الگورتھم استعمال ڪندي سيڪشن کمپريشن لاءِ سپورٽ شامل ڪئي وئي.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو