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

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

LLVM 9.0 جي نئين خاصيتن ۾ شامل آهي تجرباتي ڊيزائن جي ٽيگ کي ٽارگيٽ RISC-V پليٽ فارم تان هٽائڻ، OpenCL لاءِ C++ سپورٽ، LLD ۾ هڪ پروگرام کي متحرڪ طور تي لوڊ ٿيل حصن ۾ ورهائڻ جي صلاحيت، ۽ "asm وڃو"، لينڪس ڪنييل ڪوڊ ۾ استعمال ٿيل. libc++ WASI (WebAssembly System Interface) لاءِ سپورٽ شامل ڪئي، ۽ LLD WebAssembly متحرڪ لنڪنگ لاءِ ابتدائي مدد شامل ڪئي.

واڌايون ڪلانگ 9.0 ۾:

  • شامل ڪيو ويو جي سي سي جي مخصوص اظهار جو نفاذ "asm وڃو"، جيڪو توهان کي اجازت ڏئي ٿو ته هڪ جمع ڪندڙ ان لائن بلاڪ کان سي ڪوڊ ۾ هڪ ليبل ڏانهن. ھي فيچر گھربل آھي لينڪس ڪنيل کي ”CONFIG_JUMP_LABEL=y“ موڊ ۾ Clang استعمال ڪندي سسٽم تي x86_64 آرڪيٽيڪچر سان. پوئين رليز ۾ شامل ڪيل تبديلين کي مدنظر رکندي، لينڪس ڪرنل هاڻي ڪلانگ ۾ x86_64 آرڪيٽيڪچر لاءِ ٺاهي سگهجي ٿو (اڳ ۾ صرف آرم، آرڪ 64، پي پي سي 32، پي پي سي 64le ۽ ايمپس آرڪيٽيڪچرز لاءِ بلڊنگ سپورٽ ڪئي وئي هئي). ان کان علاوه، Android ۽ ChromeOS پروجيڪٽ اڳ ۾ ئي تبديل ڪيا ويا آهن ڪلنگ استعمال ڪرڻ لاءِ ڪنيل بلڊنگ لاءِ، ۽ گوگل جانچ ڪري رهيو آهي ڪلنگ کي بنيادي پليٽ فارم جي طور تي ان جي پيداوار لينڪس سسٽم لاءِ ڪنيل تعمير ڪرڻ لاءِ. مستقبل ۾، ٻيا LLVM جزا ڪنيبل تعمير جي عمل ۾ استعمال ڪري سگھجن ٿا، جن ۾ LLD، llvm-objcopy، llvm-ar، llvm-nm، ۽ llvm-objdump؛
  • OpenCL ۾ C++ 17 استعمال ڪرڻ لاءِ تجرباتي سپورٽ شامل ڪئي وئي. مخصوص خاصيتن ۾ ايڊريس اسپيس جي خاصيتن لاءِ سپورٽ، ٽائپ ڪاسٽنگ آپريٽرن ذريعي ايڊريس اسپيس جي تبديلي کي بلاڪ ڪرڻ، ویکٹر جي قسمن جي فراهمي، جيئن OpenCL لاءِ C ۾، تصويرن، واقعن، چينلن وغيره لاءِ مخصوص OpenCL قسمن جي موجودگي.
  • شامل ڪيو ويو نئون ڪمپيلر جھنڊو “-ftime-trace” and “-ftime-trace-granularity=N” ته جيئن فرنٽ اينڊ جي مختلف مرحلن تي عمل ڪرڻ واري وقت تي رپورٽ ٺاھيو وڃي (پارسنگ، شروعات) ۽ پسمنظر (بهتر ڪرڻ جا مرحلا). رپورٽ json فارميٽ ۾ محفوظ ڪئي وئي، chrome://tracing ۽ speedscope.app سان مطابقت؛
  • شامل ڪيل پروسيسنگ "__declspec(مختص ڪندڙ)" جي وضاحت ڪندڙ ۽ گڏوگڏ ڊيبگنگ معلومات جي نسل جيڪا توهان کي Visual Studio ماحول ۾ ميموري جي استعمال جي نگراني ڪرڻ جي اجازت ڏئي ٿي؛
  • سي ٻولي لاءِ، سپورٽ شامل ڪئي وئي آهي “__FILE_NAME__” ميڪرو لاءِ، جيڪا “__FILE__” ميڪرو سان مشابهت رکي ٿي، پر مڪمل رستي کان سواءِ صرف فائل جو نالو شامل آهي؛
  • C++ مختلف C++ خاصيتن کي ڍڪڻ لاءِ ايڊريس اسپيس جي خاصيتن لاءِ سپورٽ کي وڌايو آهي، جنهن ۾ پيراميٽر ۽ آرگيومينٽ جا نمونا، ريفرنس جا قسم، واپسي جي قسم جو انفرنس، آبجڪٽس، آٽو generated functions، بلٽ ان آپريٽرز ۽ وڌيڪ شامل آهن.
  • OpenCL، OpenMP ۽ CUDA جي سپورٽ سان لاڳاپيل صلاحيتون وڌايو ويو آھي. ھن ۾ شامل آھي ابتدائي حمايت شامل ڪرڻ جي ضمني شموليت لاءِ بلٽ-ان OpenCL افعال ("-fdeclare-opencl-builtins" جھنڊو شامل ڪيو ويو آھي)، cl_arm_integer_dot_product ايڪسٽينشن تي عمل ڪيو ويو آھي، ۽ تشخيصي اوزار کي وڌايو ويو آھي؛
  • جامد تجزيي جي ڪم کي بهتر ڪيو ويو آهي ۽ جامد تجزيي کي انجام ڏيڻ تي دستاويز شامل ڪيا ويا آهن. شامل ڪيل جھنڊا دستياب چيڪ ڪندڙ ماڊلز ۽ سپورٽ ڪيل اختيارن کي ڏيکارڻ لاءِ ("-تجزيي-چيڪر[-اختيار]-مدد"، "-تجزيي-چيڪر [-اختيار]-مدد-الفا" ۽ "-تجزيي-چيڪر [-اختيار] -مدد "-ڊولپر"). شامل ڪيو ويو "-analyzer-werror" جھنڊو ڊيڄاريندڙن کي غلطي جي طور تي علاج ڪرڻ لاء.
    نئين تصديق جا طريقا شامل ڪيا ويا:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling بفرن سان ڪم ڪرڻ لاءِ غير محفوظ طريقن جي نشاندهي ڪرڻ لاءِ؛
    • osx.MIGChecker MIG (Mach Interface Generator) ڪال ضابطن جي ڀڃڪڙي جي ڳولا لاءِ؛
    • optin.osx.OSObjectCStyleCast غلط XNU libkern اعتراض جي تبديلين کي ڳولڻ لاءِ؛
    • apiModeling.llvm LLVM ڪوڊ بيس ۾ غلطيون معلوم ڪرڻ لاءِ ماڊلنگ چيڪنگ جي ڪمن جي سيٽ سان؛
    • غير شروع ٿيل C++ شيون چيڪ ڪرڻ لاءِ مستحڪم ڪوڊ (optin.cplusplus پيڪيج ۾ غير شروع ٿيل اعتراض)؛
  • ڪلانگ فارميٽ يوٽيلٽي C# ٻولي ۾ ڪوڊ فارميٽنگ لاءِ سپورٽ شامل ڪئي آهي ۽ Microsoft پاران استعمال ڪيل ڪوڊ فارميٽنگ اسٽائل لاءِ سپورٽ مهيا ڪري ٿي.
  • clang-cl، هڪ متبادل ڪمانڊ لائن انٽرفيس جيڪو Visual Studio ۾ شامل ڪيل cl.exe ڪمپائلر سان آپشن-سطح جي مطابقت مهيا ڪري ٿو، غير موجود فائلن کي ڪمانڊ لائن آپشنز جي طور تي علاج ڪرڻ لاءِ هيورسٽڪس شامل ڪيو آهي ۽ هڪ لاڳاپيل ڊيڄاريندڙ ڏيکاري ٿو (مثال طور، جڏهن هلندي "clang-cl /diagnostic:caret /c test.cc")؛
  • نئين چيڪن جو هڪ وڏو حصو linter clang-tidy ۾ شامل ڪيو ويو آهي، بشمول OpenMP API لاءِ مخصوص شامل ڪيل چيڪ؛
  • وڌايو ويو سرور صلاحيتون clangd (ڪلانگ سرور)، جنهن ۾ پس منظر انڊيڪس بلڊنگ موڊ ڊفالٽ طور فعال ڪيو ويو آهي، ڪوڊ سان لاڳاپيل ڪارناما لاءِ سپورٽ شامل ڪئي وئي آهي (متغير ٻيهر حاصل ڪرڻ، آٽو ۽ ميڪرو وصفن جي توسيع، فرار ٿيل تارن کي غير محفوظ ٿيلن ۾ تبديل ڪرڻ)، ڊسپلي ڪرڻ جي صلاحيت. Clang-tidy کان ڊيڄاريندڙ، هيڊر فائلن ۾ غلطين جي وڌايل تشخيص ۽ قسم جي درجه بندي بابت معلومات کي ظاهر ڪرڻ جي صلاحيت شامل ڪئي؛

مکيه جدت ايل ايل وي ايم 9.0:

  • LLD لنڪر ۾ هڪ تجرباتي ورهاڱي جي خصوصيت شامل ڪئي وئي آهي، جيڪا توهان کي هڪ پروگرام کي ڪيترن ئي حصن ۾ ورهائڻ جي اجازت ڏئي ٿي، جن مان هر هڪ الڳ ELF فائل ۾ واقع آهي. هي فيچر توهان کي پروگرام جي مکيه حصي کي لانچ ڪرڻ جي اجازت ڏئي ٿو، جيڪو آپريشن دوران گهربل ٻين حصن کي لوڊ ڪندو (مثال طور، توهان ٺاهيل پي ڊي ايف ويور کي هڪ الڳ فائل ۾ الڳ ڪري سگهو ٿا، جيڪو صرف ان وقت لوڊ ٿيندو جڏهن صارف PDF کي کوليو. فائل).

    ايل ايل ڊي لنڪر سامهون آندو arm32_7، arm64، ppc64le ۽ x86_64 آرڪيٽيڪچرز لاءِ لينڪس ڪنيل کي ڳنڍڻ لاءِ موزون حالت ۾.
    نوان آپشنز "-" (اوٽ پُٽ to stdout)، "-[no-]allow-shlib-undefined"، "-undefined-glob"، "-nmagic"، "-omagic"، "-انحصار-لائبريري"، "- z ifunc-noplt" ۽ "-z common-page-size". AArch64 آرڪيٽيڪچر لاءِ، BTI (برانچ ٽارگيٽ انڊيڪيٽر) ۽ پي اي سي (پوائنٽر آٿنٽيڪيشن ڪوڊ) هدايتون شامل ڪيون ويون آھن. MIPS، RISC-V ۽ PowerPC پليٽ فارمن لاءِ سپورٽ خاص طور تي بهتر ڪئي وئي آهي. WebAssembly لاءِ متحرڪ ڳنڍڻ لاءِ ابتدائي مدد شامل ڪئي وئي؛

  • libc++ ۾ لاڳو ڪيو ويو functions size, std::is_constant_evaluated, std::midpoint ۽ std::lerp, طريقن "front" ۽ "back" std::span ۾ شامل ڪيا ويا آھن، قسمن جون خاصيتون std::is_unbounded_array ۽ std::is_bounded_array شامل ڪيا ويا آھن , std صلاحيتن کي وڌايو ويو آهي: :atomic. GCC 4.9 لاءِ سپورٽ بند ڪئي وئي آھي (جي سي سي 5.1 ۽ نئين رليز سان استعمال ڪري سگھجي ٿو). شامل ڪيل سپورٽ واسي (WebAssembly سسٽم انٽرفيس، برائوزر کان ٻاهر WebAssembly استعمال ڪرڻ لاءِ هڪ انٽرفيس)؛
  • نيون اصلاحون شامل ڪيون ويون آھن. ڪجھ حالتن ۾ bcmp ۾ memcmp ڪالن جي تبديلي کي فعال ڪيو ويو. جمپ جدولن لاءِ رينج چيڪنگ جي لاڳو ٿيل کوٽ جنهن ۾ هيٺين سوئچ بلاڪن تائين رسائي نه ٿي سگهي يا جڏهن هدايتون استعمال نه ڪيون وڃن، مثال طور، جڏهن ڪالنگ فنڪشن ٽائپ وائڊ سان؛
  • RISC-V آرڪيٽيڪچر لاءِ پس منظر کي مستحڪم ڪيو ويو آهي، جيڪو هاڻي تجرباتي طور تي پوزيشن ۾ نه آهي ۽ ڊفالٽ طور تي ٺهيل آهي. MAFDC ايڪسٽينشن سان RV32I ۽ RV64I هدايتون سيٽ ورجن لاءِ مڪمل ڪوڊ جنريشن سپورٽ مهيا ڪري ٿي.
  • X86، AArch64، ARM، SystemZ، MIPS، AMDGPU ۽ PowerPC آرڪيٽيڪچرز لاءِ پس منظر ۾ ڪيترائي سڌارا ڪيا ويا آھن. مثال طور، فن تعمير لاء
    AArch64 SVE2 (Scalable Vector Extension 2) ۽ MTE (ميموري ٽيگنگ ايڪسٽينشن) هدايتون لاءِ سپورٽ شامل ڪئي؛ ARM پس منظر ۾، Armv8.1-M آرڪيٽيڪچر ۽ MVE (M-Profile Vector Extension) جي واڌ لاءِ سپورٽ شامل ڪئي وئي. GFX10 (Navi) فن تعمير لاءِ سپورٽ AMDGPU پس منظر ۾ شامل ڪئي وئي آهي، فنڪشن ڪالنگ صلاحيتون ڊفالٽ طور فعال ڪيون ويون آهن، ۽ هڪ گڏيل پاس چالو ڪيو ويو آهي DPP (Data-Parallel Primitives).

  • LLDB ڊيبگر وٽ ھاڻي رنگن کي نمايان ڪرڻ لاءِ پٺتي پيل آھن ۽ شامل ڪيل سپورٽ لاءِ DWARF4 debug_types ۽ DWARF5 debug_info بلاڪ؛
  • COFF فارميٽ ۾ اعتراض ۽ قابل عمل فائلن لاءِ سپورٽ llvm-objcopy ۽ llvm-strip يوٽيلٽيز ۾ شامل ڪئي وئي آهي.

جو ذريعو: opennet.ru

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