LLVM 13.0 کمپائلر سیٹ کی ریلیز

چھ ماہ کی ترقی کے بعد، LLVM 13.0 پروجیکٹ کا اجراء پیش کیا گیا - ایک GCC-مطابقت پذیر ٹول کٹ (مرتب، اصلاح کرنے والے اور کوڈ جنریٹر) جو پروگراموں کو RISC جیسی ورچوئل ہدایات کے انٹرمیڈیٹ بٹ کوڈ میں مرتب کرتی ہے (ایک نچلی سطح کی ورچوئل مشین جس میں ملٹی لیول آپٹیمائزیشن سسٹم)۔ تیار کردہ سیڈو کوڈ کو JIT کمپائلر کا استعمال کرتے ہوئے براہ راست پروگرام کے عمل کے وقت مشین ہدایات میں تبدیل کیا جا سکتا ہے۔

بجنا 13.0 میں بہتری:

  • گارنٹی شدہ ٹیل کالز کے لیے سپورٹ کو نافذ کیا گیا (کسی فنکشن کے بالکل آخر میں سب روٹین کو کال کرنا، اگر سب روٹین خود کال کرتا ہے تو ٹیل ریکریشن بنتا ہے)۔ گارنٹی شدہ ٹیل کالز کے لیے سپورٹ C++ میں "[[clang::musttail]]" وصف اور C میں "__attribute__((musttail))" کے ذریعے فراہم کی جاتی ہے، جسے "واپسی" کے بیان میں استعمال کیا جاتا ہے۔ خصوصیت آپ کو اسٹیک کی کھپت کو بچانے کے لیے فلیٹ تکرار میں کوڈ کی تعیناتی کے ذریعے اصلاح کو نافذ کرنے کی اجازت دیتی ہے۔
  • "استعمال" کے اعلانات اور کلینگ ایکسٹینشنز "[[]]" فارمیٹ کا استعمال کرتے ہوئے C++11 طرز کی خصوصیات کی وضاحت کے لیے معاونت فراہم کرتے ہیں۔
  • جب آپ صارف کوڈ میں محفوظ شناخت کنندگان کی وضاحت کرتے ہیں تو انتباہ ظاہر کرنے کے لیے "-Wreserved-identifier" جھنڈا شامل کیا گیا۔
  • انتباہ ظاہر کرنے کے لیے "-Wunused-but-set-parameter" اور "-Wunused-but-set-variable" جھنڈے شامل کیے گئے ہیں اگر پیرامیٹر یا متغیر سیٹ ہے لیکن استعمال نہیں کیا گیا ہے۔
  • انتباہ جاری کرنے کے لیے "-Wnull-pointer-subtraction" جھنڈا شامل کیا گیا اگر کوڈ گھٹانے کی کارروائیوں میں null pointer کے استعمال کی وجہ سے غیر متعینہ رویہ متعارف کرا سکتا ہے۔
  • ہر کوڈ فائل کے لیے ایک اضافی ".su" فائل بنانے کے لیے "-fstack-usage" جھنڈا شامل کیا گیا جس میں فائل پر کارروائی کی جا رہی ہر فنکشن کے لیے اسٹیک فریموں کے سائز کے بارے میں معلومات شامل ہیں۔
  • جامد تجزیہ کار میں ایک نئی آؤٹ پٹ قسم کا اضافہ کیا گیا ہے - "sarif-html"، جو HTML اور Sarif فارمیٹس میں بیک وقت رپورٹس کی تخلیق کا باعث بنتا ہے۔ نیا allocClassWithName چیک شامل کیا گیا۔ "-analyzer-display-progress" آپشن کی وضاحت کرتے وقت، ہر فنکشن کے تجزیہ کا وقت ظاہر ہوتا ہے۔ اسمارٹ پوائنٹر تجزیہ کار (alpha.cplusplus.SmartPtr) تقریباً تیار ہے۔
  • OpenCL سپورٹ سے وابستہ صلاحیتوں کو بڑھا دیا گیا ہے۔ نئی ایکسٹینشنز cl_khr_integer_dot_product، cl_khr_extended_bit_ops، __cl_clang_bitfields اور __cl_clang_non_portable_kernel_param_types کے لیے تعاون شامل کر دیا گیا۔ OpenCL 3.0 تفصیلات کا نفاذ جاری ہے۔ C کے لیے، OpenCL 1.2 تصریح بطور ڈیفالٹ استعمال کی جاتی ہے جب تک کہ دوسرا ورژن واضح طور پر منتخب نہ کیا جائے۔ C++ کے لیے، ".clcpp" ایکسٹینشن والی فائلوں کے لیے سپورٹ شامل کر دیا گیا ہے۔
  • OpenMP 5.1 تفصیلات میں بیان کردہ لوپ ٹرانسفارمیشن ڈائریکٹیو ("#pragma omp unrol" اور "#pragma omp tile") کے لیے سپورٹ کو لاگو کر دیا گیا ہے۔
  • کلنگ فارمیٹ یوٹیلیٹی میں اختیارات شامل کیے گئے: تبصروں سے پہلے خالی جگہوں کی تعداد کی وضاحت کرنے کے لیے SpacesInLineCommentPrefix، IndentAccessModifiers، LambdaBodyIndentation اور PPIndentWidth اندراجات، لیمبڈا ایکسپریشنز اور پری پروسیسر کی ہدایات کو کنٹرول کرنے کے لیے۔ ہیڈر فائلوں (SortIncludes) کی گنتی کو ترتیب دینے کے امکانات کو بڑھا دیا گیا ہے۔ JSON فائلوں کی فارمیٹنگ کے لیے تعاون شامل کیا گیا۔
  • نئے چیکوں کا ایک بڑا حصہ لنٹر کلینگ-ٹیڈی میں شامل کیا گیا ہے۔

LLVM 13.0 میں اہم اختراعات:

  • CET (Windows Control-flow Enforcement Technology) ٹیکنالوجی کو استعمال کرنے کے لیے "-ehcontguard" کا اختیار شامل کیا گیا ہے تاکہ استثنیٰ ہینڈلنگ مرحلے پر Return-Oriented Programming (ROP) تکنیک کا استعمال کرتے ہوئے بنائے گئے استحصال کے عمل سے بچایا جا سکے۔
  • debuginfo-test پروجیکٹ کا نام بدل کر کراس پروجیکٹ ٹیسٹ رکھ دیا گیا ہے اور اسے ڈیبگنگ کی معلومات تک محدود نہیں بلکہ مختلف پروجیکٹس کے اجزاء کی جانچ کرنے کے لیے ڈیزائن کیا گیا ہے۔
  • اسمبلی سسٹم کئی تقسیموں کی تعمیر کے لیے معاونت فراہم کرتا ہے، مثال کے طور پر، ایک افادیت کے ساتھ، اور دوسرا ڈویلپرز کے لیے لائبریریوں کے ساتھ۔
  • AArch64 فن تعمیر کے پس منظر میں، اسمبلر میں Armv9-A RME (Realm Management Extension) اور SME (Scalable Matrix Extension) ایکسٹینشن کے لیے سپورٹ لاگو کیا گیا ہے۔
  • ISA V68/HVX کے لیے سپورٹ کو مسدس فن تعمیر کے پس منظر میں شامل کر دیا گیا ہے۔
  • x86 بیک اینڈ نے AMD Zen 3 پروسیسرز کے لیے سپورٹ کو بہتر بنایا ہے۔
  • AMDGPU بیک اینڈ میں GFX1013 RDNA2 APU کے لیے تعاون شامل کر دیا گیا۔
  • Libc++ C++20 اور C++2b معیارات کی نئی خصوصیات کو نافذ کرنا جاری رکھے ہوئے ہے، بشمول "تصورات" لائبریری کی تکمیل۔ MinGW پر مبنی ونڈوز پلیٹ فارم کے لیے std::filesystem کے لیے تعاون شامل کر دیا گیا۔ ہیڈر فائلوں کو الگ کر دیا گیا۔ , اور . مکمل طور پر نافذ نہ ہونے والی فعالیت کے ساتھ ہیڈر فائلوں کو غیر فعال کرنے کے لیے LIBCXX_ENABLE_INCOMPLETE_FEATURES تعمیر کا اختیار شامل کیا گیا۔
  • ایل ایل ڈی لنکر کی صلاحیتوں کو بڑھا دیا گیا ہے، جس میں بگ اینڈین آرچ 64 پروسیسرز کے لیے سپورٹ لاگو کیا گیا ہے، اور Mach-O بیک اینڈ کو ایسی حالت میں لایا گیا ہے جو باقاعدہ پروگراموں کو لنک کرنے کی اجازت دیتا ہے۔ LLD کا استعمال کرتے ہوئے Glibc کو جوڑنے کے لیے درکار اصلاحات شامل ہیں۔
  • llvm-mca (مشین کوڈ اینالائزر) یوٹیلیٹی نے ایسے پروسیسرز کے لیے تعاون شامل کیا ہے جو ہدایات کو ترتیب سے (ان آرڈر سپر اسکیلر پائپ لائن) پر عمل کرتے ہیں، جیسے کہ ARM Cortex-A55۔
  • AArch64 پلیٹ فارم کے لیے LLDB ڈیبگر Pointer Authentication، MTE (MemTag، Memory Tagging Extension) اور SVE رجسٹروں کے لیے مکمل تعاون فراہم کرتا ہے۔ شامل کیے گئے کمانڈز جو آپ کو ہر میموری ایلوکیشن آپریشن میں ٹیگز کو باندھنے کی اجازت دیتے ہیں اور میموری تک رسائی حاصل کرتے وقت پوائنٹر کی جانچ کو منظم کرتے ہیں، جس کا صحیح ٹیگ سے منسلک ہونا ضروری ہے۔
  • ایل ایل ڈی بی ڈیبگر اور فورٹران لینگویج کا فرنٹ اینڈ - فلانگ پروجیکٹ کے ذریعہ تیار کردہ بائنری اسمبلیوں میں شامل کیا گیا ہے۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں