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

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

LLVM 10.0 ۾ نيون خصوصيتون شامل آھن C++ تصورن لاءِ سپورٽ، ھاڻي ڪلانگ ھڪ الڳ عمل جي طور تي نه ھلندو، ونڊوز لاءِ CFG (ڪنٽرول فلو گارڊ) چيڪن لاءِ سپورٽ، ۽ نئين CPU صلاحيتن لاءِ سپورٽ شامل آھي.

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

  • شامل ڪيل سپورٽ لاء "تصورات"، هڪ C++ ٽيمپليٽ جو واڌارو جيڪو ايندڙ معيار ۾ شامل ڪيو ويندو، ڪوڊنيم C++ 2a (-std=c++2a پرچم طرفان آن ڪيو ويو).
    تصورات توهان کي ٽيمپليٽ پيراميٽر جي ضرورتن جو هڪ سيٽ بيان ڪرڻ جي اجازت ڏين ٿا جيڪي، گڏ ڪرڻ وقت، دليلن جي سيٽ کي محدود ڪن ٿيون جيڪي ٽيمپليٽ پيٽرولر طور قبول ڪري سگھجن ٿيون. تصورن کي استعمال ڪري سگھجي ٿو منطقي تضادن کان بچڻ لاءِ ڊيٽا جي قسمن جي ملڪيتن جي وچ ۾ استعمال ٿيل ٽيمپليٽ ۽ ڊيٽا جي قسم جي ملڪيتن جي ان پٽ پيٽرولن جي.

    ٽيمپليٽ
    تصور EqualityComparable = گھربل (T a، T b) {
    { a == b } -> std:: boolean؛
    {a != b } -> std::boolean;
    };

  • ڊفالٽ طور، هڪ الڳ عمل جي شروعات ("clang -cc1") جنهن ۾ تاليف ڪيو ويندو آهي روڪيو ويو آهي. تاليف هاڻي مکيه عمل ۾ ڪيو ويو آهي، ۽ "-fno-integrated-cc1" اختيار استعمال ڪري سگهجي ٿو پراڻي رويي کي بحال ڪرڻ لاء.
  • نئين تشخيصي طريقا:
    • "-Wc99-designator" ۽ "-Wreorder-init-list" C99 شروعاتي استعمال ڪرڻ جي خلاف ڊيڄاري ٿو C++ موڊ ۾ انهن ڪيسن ۾ جتي اهي C99 ۾ صحيح آهن پر C++ 20 ۾ نه.
    • "-Wsizeof-array-div" - ڪيچ حالتون جهڙوڪ "int arr[10]؛ …sizeof(arr)/ sizeof(short)…” (هئڻ گهرجي “sizeof(arr)/ sizeof(int)”).
    • "-Wxor-used-as-po" - تعميرات جي استعمال جي خلاف ڊيڄاري ٿو جهڙوڪ آپريشنز ۾ "^" (xor) آپريٽر جو استعمال جيڪو وضاحت سان پريشان ٿي سگھي ٿو (2^16).
    • "-Wfinal-dtor-non-final-class" - انھن طبقن جي باري ۾ ڊيڄاري ٿو جن کي "فائنل" بيان ڪندڙ سان نشان نه لڳايو ويو آھي، پر "فائنل" وصف سان ڊسٽرڪٽر آھي.
    • "-Wtautological-bitwise-compare" ڊيڄاريندڙن جو ھڪڙو گروپ آھي جيڪو bitwise آپريشن ۽ ھڪ مستقل جي وچ ۾ ٽائيٽليڪل موازن جي تشخيص ڪرڻ لاءِ، ۽ ھميشه-سچو موازن جي سڃاڻپ لاءِ جنھن ۾ bitwise OR آپريشن کي غير منفي نمبر تي لاڳو ڪيو ويندو آھي.
    • "-Wbitwise-conditional-parentheses" مسئلن کان ڊيڄاري ٿو جڏهن منطقي آپريٽرز ۽ (&) ۽ OR (|) کي مشروط آپريٽر (؟:) سان ملايو وڃي ٿو.
    • "-Wmisleading-indentation" GCC کان ساڳئي نالي جي چيڪ جو هڪ اينالاگ آهي، جيڪو انڊينٽ ٿيل اشارن بابت خبردار ڪري ٿو ڄڻ ته اهي هڪ if/else/for/while بلاڪ جو حصو آهن، پر حقيقت ۾ اهي هن بلاڪ ۾ شامل نه آهن. .
    • جڏهن وضاحت ڪندي "-Wextra"، "-Wdeprecated-copy" چيڪ کي فعال ڪيو ويو آهي، تعمير ڪندڙن جي استعمال بابت خبردار ڪيو ويو آهي
      "منتقل" ۽ "ڪاپي" ڪلاسن ۾ واضح تباهي واري تعريف سان.

    • "-Wtautological-overlap-compare"، "-Wsizeof-pointer-div"، "-Wtautological-compare"، "-Wrange-loop-analysis" چيڪن کي وڌايو ويو آھي.
    • "-Wbitwise-op-parentheses" ۽ "-Wlogical-op-parentheses" چيڪ ڊفالٽ طور بند ٿيل آھن.
  • C ۽ C ++ ڪوڊ ۾، پوائنٽر رياضياتي عملن کي صرف صفن ۾ اجازت ڏني وئي آهي. Undefined Behavior Sanitizer in "-fsanitize=pointer-overflow" موڊ هاڻي ڪيسن کي پڪڙي ٿو جهڙوڪ نان-زيرو آفسيٽ کي نل پوائنٽر ۾ شامل ڪرڻ يا نول پوائنٽر ٺاهڻ جڏهن هڪ انٽيجر کي نان-نل پوائنٽر مان گھٽائڻ.
  • "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) موڊ کي "int" قسم جي ڀيٽ ۾ ٿورڙي سائيز وارن قسمن جي واڌاري ۽ گھٽتائي واري عملن جي مسئلن جي نشاندهي ڪرڻ لاءِ ٺاھيو ويو آھي.
  • جڏهن x86 ٽارگيٽ آرڪيٽيڪچرز کي چونڊيو "-march=skylake-avx512"، "-march=icelake-client"، "-march=icelake-server"، "-march=cascadelake" ۽ "-march=cooperlake" ڊفالٽ ۾ ویکٹر ٿيل. ڪوڊ 512-bit zmm رجسٽرن کي استعمال ڪرڻ بند ڪري ڇڏيو آھي، سواءِ ان جي سڌي اشارو جي سورس ڪوڊ ۾. ان جو سبب اهو آهي ته سي پي يو فریکوئنسي گھٽجي ٿي جڏهن 512-bit آپريشن کي انجام ڏئي ٿي، جيڪا مجموعي ڪارڪردگي تي منفي اثر انداز ٿي سگهي ٿي. نئين رويي کي تبديل ڪرڻ لاء، اختيار "-mprefer-vector-width=512" مهيا ڪيو ويو آهي.
  • "-flax-vector-conversions" پرچم جو رويو GCC سان ملندڙ جلندڙ آهي: انٽيجر ۽ فلوٽنگ پوائنٽ ویکٹر جي وچ ۾ ضمني ویکٹر بٽ تبديليون منع ٿيل آهن. هن حد کي ختم ڪرڻ لاء، اهو پرچم استعمال ڪرڻ جي تجويز آهي
    "-flax-vector-conversions=all" جيڪو ڊفالٽ آهي.

  • Octeon خاندان جي MIPS CPUs لاءِ بهتر سپورٽ. شامل ڪيو ويو "octeon+" صحيح CPU قسمن جي لسٽ ۾.
  • جڏهن WebAssembly وچولي ڪوڊ ۾ گڏ ڪري، wasm-opt optimizer خودڪار طور تي سڏيو ويندو آهي، جيڪڏهن سسٽم ۾ موجود هجي.
  • RISC-V آرڪيٽيڪچر جي بنياد تي سسٽم لاءِ، فلوٽنگ پوائنٽ ويلز کي محفوظ ڪرڻ لاءِ رجسٽرز جي استعمال جي اجازت ڏني وئي آهي مشروط بلاڪن جي اسمبلر ان لائن داخلن ۾.
  • شامل ڪيو ويو نئون گڏ ڪرڻ وارو جھنڊو: "-fgnuc-version" نسخي جي قيمت مقرر ڪرڻ لاءِ "__GNUC__" ۽ ساڳيا ميڪرو؛ "-fmacro-prefix-map=OLD=NEW" ڊاريڪٽري جي اڳياڙي OLD کي ميڪرو ۾ NEW سان تبديل ڪرڻ لاءِ جيئن ته "__FILE__"؛ "-fpatchable-function-entry=N[,M]" فنڪشن انٽري پوائنٽ کان اڳ ۽ بعد ۾ NOP هدايتون جو هڪ خاص تعداد پيدا ڪرڻ لاءِ. RISC-V لاءِ
    "-ffixed-xX"، "-mcmodel=medany" ۽ "-mcmodel=medlow" جھنڊن لاءِ سپورٽ شامل ڪئي وئي.

  • '__attribute__((target("branch-protection=..."))) وصف لاءِ سپورٽ شامل ڪئي وئي، جنھن جو اثر اختيار سان ملندڙ جلندڙ آھي - برانچ- تحفظ.
  • ونڊوز پليٽ فارم تي، جڏهن "-cfguard" جھنڊو بيان ڪيو وڃي ٿو، اڻ سڌي طرح فنڪشن ڪالن لاء عمل جي وهڪري جي سالميت جي چڪاس (ڪنٽرول فلو گارڊ) جي متبادل تي عمل ڪيو ويندو آهي. چيڪ متبادل کي غير فعال ڪرڻ لاء، توھان استعمال ڪري سگھو ٿا "-cfguard-nochecks" پرچم يا "__declspec(guard(nocf))" موڊيفائر.
  • gnu_inline وصف جو رويو GCC سان ملندڙ جلندڙ آهي ڪيسن ۾ جتي اهو استعمال ڪيو ويندو آهي "ٻاهرين" لفظ جي بغير.
  • OpenCL ۽ CUDA سپورٽ سان لاڳاپيل صلاحيتون وڌايو ويو آھي. نئين OpenMP 5.0 خاصيتن لاءِ سپورٽ شامل ڪئي وئي.
  • ڪلانگ فارميٽ يوٽيلٽي ۾ هڪ معياري اختيار شامل ڪيو ويو آهي، جيڪو توهان کي C++ معيار جي ورزن جو تعين ڪرڻ جي اجازت ڏئي ٿو جيڪو ڪوڊ پارس ڪرڻ ۽ فارميٽ ڪرڻ وقت استعمال ڪيو ويو آهي (تازو، آٽو، c++03، c++11, c++14, سي++17، سي++20).
  • جامد تجزيي ۾ نوان چيڪ شامل ڪيا ويا آهن: alpha.cplusplus.PlacementNew اهو طئي ڪرڻ لاءِ ته ڇا ڪافي اسٽوريج جي جاءِ آهي، fuchsia.HandleChecker Fuchsia handlers سان لاڳاپيل ليڪ ڳولڻ لاءِ، security.insecureAPI.decodeValueOfObjCType کي معلوم ڪرڻ لاءِ امڪاني بفر اوور فلو جڏهن استعمال ڪري ٿو. :تي:].
  • Undefined Behavior Sanitizer (UBSan) پنھنجي پوائنٽر اوور فلو چيڪ کي وڌايو آھي NULL پوائنٽرز تي غير صفر آف سيٽ جي ايپليڪيشن کي پڪڙڻ لاءِ يا NULL پوائنٽر آفسيٽ جي نتيجي ۾ اضافو.
  • لڪير ۾ ڪلنگ- صاف شامل ڪيو ويو نئين چيڪن جو هڪ وڏو حصو.

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

  • فريم ورڪ ڏانهن منسوب ڪندڙ نئون باضابطه اصلاح ۽ تجزيه شامل ڪيا ويا آهن. 19 مختلف خاصيتن جي حالت جي اڳڪٿي ڪئي وئي آهي، جن ۾ 12 خاصيتون شامل آهن 12 LLVM IR ۽ 7 خلاصيون خاصيتون جهڙوڪ زندهه.
  • شامل ڪيو ويو نئون ميٽرڪس رياضياتي افعال گڏ ڪرڻ ۾ ٺهيل (اندريون)، جيڪي تاليف دوران موثر ویکٹر هدايتون سان تبديل ڪيا ويا آهن.
  • X86، AArch64، ARM، SystemZ، MIPS، AMDGPU ۽ PowerPC آرڪيٽيڪچرز لاءِ پس منظر ۾ ڪيترائي سڌارا ڪيا ويا آھن. شامل ڪيل سي پي يو سپورٽ
    Cortex-A65، Cortex-A65AE، Neoverse E1 ۽ Neoverse N1. ARMv8.1-M لاءِ، ڪوڊ جي پيدائش واري عمل کي بهتر ڪيو ويو آهي (مثال طور، گهٽ ۾ گهٽ اوور هيڊ سان لوپس لاءِ سپورٽ ظاهر ٿي چڪي آهي) ۽ MVE ايڪسٽينشن استعمال ڪندي آٽو وڪٽرائيزيشن لاءِ سپورٽ شامل ڪئي وئي آهي. بهتر CPU MIPS Octeon سپورٽ. پاور پي سي لاءِ، MASSV (ميٿميٽيڪل ايڪسلريشن سب سسٽم) لائبريري استعمال ڪندي رياضياتي سب روٽينز جي ویکٹرائيزيشن کي فعال ڪيو ويو آهي، ڪوڊ جنريشن کي بهتر ڪيو ويو آهي، ۽ لوپس مان ميموري جي رسائي بهتر ڪئي وئي آهي. x86 لاءِ، ویکٹر جي قسمن جي سنڀال v2i32، v4i16، v2i16، v8i8، v4i8 ۽ v2i8 تبديل ڪئي وئي آهي.

  • WebAssembly لاءِ بهتر ڪوڊ جنريٽر. شامل ڪيل سپورٽ TLS (Thread-Local Storage) ۽ atomic.fence لاءِ هدايتون. SIMD سپورٽ خاص طور تي وڌايو ويو آهي. WebAssembly آبجیکٹ فائلن کي ھاڻي ملٽي-ويلڊ فنڪشن دستخط استعمال ڪرڻ جي صلاحيت آھي.
  • تجزيي کي استعمال ڪيو ويندو آهي جڏهن پروسيسنگ لوپس ياداشت ايس ايس اي، جيڪو توهان کي مختلف ميموري عملن جي وچ ۾ انحصار کي بيان ڪرڻ جي اجازت ڏئي ٿو. MemorySSA تاليف ۽ عمل جي وقت کي گھٽائي سگھي ٿو يا ڪارڪردگي جي نقصان کان سواء AliasSetTracker جي بدران استعمال ڪري سگھجي ٿو.
  • LLDB ڊيبگر خاص طور تي DWARF v5 فارميٽ لاءِ سپورٽ کي بهتر ڪيو آهي. MinGW سان تعمير لاءِ بهتر سپورٽ
    ۽ ARM ۽ ARM64 آرڪيٽيڪچرز لاءِ ونڊوز ايگزيڪيوٽوبلز کي ڊيبگ ڪرڻ جي شروعاتي صلاحيت شامل ڪئي وئي. شامل ڪيل اختيارن جا تفصيل پيش ڪيا ويا جڏهن ٽيب کي دٻائڻ سان ان پٽ کي خودڪار مڪمل ڪرڻ.

  • وڌايو ويو ايل ايل ڊي لنڪر صلاحيتون. ELF فارميٽ لاءِ بهتر سپورٽ، بشمول GNU لنڪر سان گلوب ٽيمپليٽس جي مڪمل مطابقت کي يقيني بڻائڻ، ڪمپريسڊ ڊيبگ سيڪشن ".zdebug" لاءِ سپورٽ شامل ڪرڻ، .note.gnu.property سيڪشن جي وضاحت ڪرڻ لاءِ PT_GNU_PROPERTY ملڪيت شامل ڪرڻ (مستقبل ۾ استعمال ڪري سگھجي ٿو. لينڪس ڪنلز)
    "-z noseparate-code"، "-z ڌار-ڪوڊ" ۽ "-z ڌار-لوڊبل-سيگمينٽس" طريقن تي عمل ڪيو ويو آھي. MinGW ۽ WebAssembly لاءِ بهتر سپورٽ.

جو ذريعو: opennet.ru

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