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

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

LLVM 9.0 کی نئی خصوصیات میں ٹارگٹ RISC-V پلیٹ فارم سے تجرباتی ڈیزائن ٹیگ کو ہٹانا، OpenCL کے لیے C++ سپورٹ، LLD میں ایک پروگرام کو متحرک طور پر بھرے ہوئے حصوں میں تقسیم کرنے کی صلاحیت، اور "کا نفاذ" شامل ہیں۔asm جاؤ"، لینکس کرنل کوڈ میں استعمال ہوتا ہے۔ libc++ نے WASI (WebAssembly System Interface) کے لیے سپورٹ شامل کیا، اور LLD نے WebAssembly ڈائنامک لنکنگ کے لیے ابتدائی مدد شامل کی۔

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

  • شامل کیا گیا۔ جی سی سی کے مخصوص اظہار کا نفاذ"asm جاؤ"، جو آپ کو اسمبلر ان لائن بلاک سے C کوڈ کے لیبل پر جانے کی اجازت دیتا ہے۔ یہ خصوصیت x86_64 فن تعمیر والے سسٹمز پر کلینگ کا استعمال کرتے ہوئے "CONFIG_JUMP_LABEL=y" موڈ میں لینکس کرنل بنانے کے لیے درکار ہے۔ پچھلی ریلیز میں شامل کی گئی تبدیلیوں کو مدنظر رکھتے ہوئے، لینکس کرنل کو اب x86_64 فن تعمیر کے لیے کلینگ میں بنایا جا سکتا ہے (پہلے صرف بازو، aarch64، ppc32، ppc64le اور mips کے فن تعمیر کے لیے سپورٹ کیا جاتا تھا)۔ مزید یہ کہ، اینڈرائیڈ اور کروم او ایس پروجیکٹس کو پہلے ہی کرنل بنانے کے لیے کلینگ استعمال کرنے کے لیے تبدیل کر دیا گیا ہے، اور گوگل کلینگ کو اپنے پروڈکشن لینکس سسٹمز کے لیے کرنل بنانے کے لیے اہم پلیٹ فارم کے طور پر جانچ رہا ہے۔ مستقبل میں، دیگر LLVM اجزاء کو کرنل بنانے کے عمل میں استعمال کیا جا سکتا ہے، بشمول LLD، llvm-objcopy، llvm-ar، llvm-nm، اور llvm-objdump؛
  • OpenCL میں C++17 استعمال کرنے کے لیے تجرباتی معاونت شامل کی گئی۔ مخصوص خصوصیات میں ایڈریس اسپیس کے اوصاف کے لیے سپورٹ، ٹائپ کاسٹنگ آپریٹرز کے ذریعے ایڈریس اسپیس کی تبدیلی کو روکنا، ویکٹر کی اقسام کی فراہمی جیسا کہ OpenCL برائے C میں ہے، تصاویر، ایونٹس، چینلز وغیرہ کے لیے مخصوص OpenCL اقسام کی موجودگی شامل ہیں۔
  • فرنٹ اینڈ (پارسنگ، ابتدا) اور بیک اینڈ (آپٹیمائزیشن کے مراحل) کے مختلف مراحل پر عمل درآمد کے وقت پر رپورٹ تیار کرنے کے لیے نئے کمپائلر جھنڈے "-ftime-trace" اور "-ftime-trace-granularity=N" شامل کیے گئے۔ رپورٹ json فارمیٹ میں محفوظ کی گئی ہے، جو chrome://tracing اور speedscope.app کے ساتھ مطابقت رکھتی ہے۔
  • "__declspec(مختص کرنے والا)" کی وضاحت کرنے والے کی پروسیسنگ اور اس کے ساتھ ڈیبگنگ معلومات کی تخلیق جو آپ کو بصری اسٹوڈیو ماحول میں میموری کی کھپت کی نگرانی کرنے کی اجازت دیتی ہے۔
  • C زبان کے لیے، "__FILE_NAME__" میکرو کے لیے سپورٹ شامل کی گئی ہے، جو "__FILE__" میکرو سے مشابہ ہے، لیکن اس میں مکمل راستے کے بغیر صرف فائل کا نام شامل ہے۔
  • C++ نے مختلف C++ خصوصیات کا احاطہ کرنے کے لیے ایڈریس اسپیس کے اوصاف کے لیے سپورٹ کو بڑھایا ہے، بشمول پیرامیٹر اور آرگومنٹ پیٹرن، ریفرنس کی قسمیں، ریٹرن ٹائپ انفرنس، آبجیکٹ، آٹو جنریٹڈ فنکشنز، بلٹ ان آپریٹرز اور بہت کچھ۔
  • OpenCL، OpenMP اور CUDA کے لیے سپورٹ سے منسلک صلاحیتوں کو بڑھا دیا گیا ہے۔ اس میں بلٹ ان اوپن سی ایل فنکشنز کی مضمر شمولیت کے لیے ابتدائی مدد شامل ہے ("-fdeclare-opencl-builtins" جھنڈا شامل کر دیا گیا ہے)، cl_arm_integer_dot_product ایکسٹینشن کو لاگو کر دیا گیا ہے، اور تشخیصی ٹولز کو بڑھا دیا گیا ہے۔
  • جامد تجزیہ کار کے کام کو بہتر بنایا گیا ہے اور جامد تجزیہ کرنے سے متعلق دستاویزات کو شامل کیا گیا ہے۔ دستیاب چیکر ماڈیولز اور تعاون یافتہ آپشنز کو ظاہر کرنے کے لیے جھنڈے شامل کیے گئے ("-analyzer-checker[-option]-help"، "-analyzer-checker[-option]-help-alpha" اور "-analyzer-checker[-option] -help "-ڈیولپر")۔ انتباہات کو غلطیاں ماننے کے لیے "-analyzer-werror" جھنڈا شامل کیا گیا۔
    نئے تصدیقی طریقوں کو شامل کیا گیا:

    • security.insecureAPI. DeprecatedOrUnsafeBufferHandling بفرز کے ساتھ کام کرنے کے لیے غیر محفوظ طریقوں کی نشاندہی کرنے کے لیے؛
    • osx.MIGChecker MIG (Mach انٹرفیس جنریٹر) کال قوانین کی خلاف ورزیوں کی تلاش کے لیے۔
    • غلط XNU libkern آبجیکٹ کے تبادلوں کو تلاش کرنے کے لیے optin.osx.OSObjectCStyleCast؛
    • apiModeling.llvm LLVM کوڈبیس میں غلطیوں کا پتہ لگانے کے لیے ماڈلنگ چیکنگ فنکشنز کے سیٹ کے ساتھ۔
    • غیر شروع شدہ C++ اشیاء کو چیک کرنے کے لیے مستحکم کوڈ (optin.cplusplus پیکیج میں UninitializedObject)؛
  • کلینگ فارمیٹ یوٹیلیٹی نے C# زبان میں فارمیٹنگ کوڈ کے لیے سپورٹ شامل کیا ہے اور مائیکروسافٹ کے استعمال کردہ کوڈ فارمیٹنگ اسٹائل کے لیے سپورٹ فراہم کرتا ہے۔
  • clang-cl، ایک متبادل کمانڈ لائن انٹرفیس جو بصری اسٹوڈیو میں شامل cl.exe کمپائلر کے ساتھ آپشن لیول کی مطابقت فراہم کرتا ہے، نے غیر موجود فائلوں کو کمانڈ لائن کے اختیارات کے طور پر علاج کرنے اور متعلقہ وارننگ ظاہر کرنے کے لیے ہیورسٹکس کو شامل کیا ہے (مثال کے طور پر، جب "clang-cl /diagnostic :caret /c test.cc" چلا رہے ہو؛
  • نئے چیکوں کا ایک بڑا حصہ linter clang-tidy میں شامل کیا گیا ہے، بشمول OpenMP API کے لیے مخصوص اضافی چیکس؛
  • توسیع شدہ سرور کی صلاحیتیں clangd (کلینگ سرور)، جس میں بیک گراؤنڈ انڈیکس بلڈنگ موڈ بطور ڈیفالٹ فعال ہوتا ہے، کوڈ کے ساتھ سیاق و سباق کی کارروائیوں کے لیے سپورٹ شامل کیا گیا ہے (متغیر بازیافت، آٹو اور میکرو تعریفوں کی توسیع، فرار شدہ تاروں کو غیر محفوظ شدہ میں تبدیل کرنا)، ڈسپلے کرنے کی صلاحیت۔ Clang-tidy سے انتباہات، ہیڈر فائلوں میں غلطیوں کی وسیع تشخیص اور قسم کے درجہ بندی کے بارے میں معلومات ظاہر کرنے کی صلاحیت شامل کی گئی ہے۔

اہم بدعات LLVM 9.0:

  • LLD لنکر میں ایک تجرباتی تقسیم کاری کی خصوصیت شامل کی گئی ہے، جو آپ کو ایک پروگرام کو کئی حصوں میں تقسیم کرنے کی اجازت دیتی ہے، جن میں سے ہر ایک علیحدہ ELF فائل میں واقع ہے۔ یہ فیچر آپ کو پروگرام کے مرکزی حصے کو لانچ کرنے کی اجازت دیتا ہے، جو آپریشن کے دوران ضرورت کے مطابق دیگر اجزاء کو لوڈ کرے گا (مثال کے طور پر، آپ بلٹ ان پی ڈی ایف ویور کو الگ فائل میں الگ کر سکتے ہیں، جو صرف اس وقت لوڈ ہو گا جب صارف پی ڈی ایف کھولے گا۔ فائل)۔

    ایل ایل ڈی لنکر سامنے لایا arm32_7، arm64، ppc64le اور x86_64 آرکیٹیکچرز کے لیے لینکس کرنل کو جوڑنے کے لیے موزوں حالت میں۔
    نئے اختیارات "-" (آؤٹ پٹ ٹو stdout)، "-[no-]allow-shlib-undefined"، "-undefined-glob"، "-nmagic"، "-omagic"، "-dependent-library"، "- z ifunc-noplt" اور "-z common-page-size"۔ AArch64 فن تعمیر کے لیے، BTI (برانچ ٹارگٹ انڈیکیٹر) اور PAC (پوائنٹر توثیق کوڈ) ہدایات کے لیے تعاون شامل کیا گیا ہے۔ MIPS، RISC-V اور PowerPC پلیٹ فارمز کے لیے سپورٹ کو نمایاں طور پر بہتر کیا گیا ہے۔ WebAssembly کے لیے متحرک لنکنگ کے لیے ابتدائی معاونت شامل کی گئی۔

  • libc++ میں لاگو کیا فنکشن سائز، std::is_constant_evaluated، std::midpoint اور std::lerp، طریقوں "سامنے" اور "بیک" کو std::span میں شامل کیا گیا ہے، std::is_unbounded_array اور std::is_bounded_array کی اقسام کی خصوصیات شامل کی گئی ہیں۔ , std صلاحیتوں کو بڑھا دیا گیا ہے: :atomic. GCC 4.9 کے لیے سپورٹ بند کر دیا گیا ہے (GCC 5.1 اور نئی ریلیز کے ساتھ استعمال کیا جا سکتا ہے)۔ سپورٹ شامل کر دی گئی۔ میں تھا (WebAssembly سسٹم انٹرفیس، ویب اسمبلی کو براؤزر سے باہر استعمال کرنے کا ایک انٹرفیس)؛
  • نئی اصلاحیں شامل کی گئی ہیں۔ کچھ حالات میں memcmp کالز کو bcmp میں تبدیل کرنا فعال کیا گیا۔ جمپ ٹیبلز کے لیے رینج چیکنگ کو لاگو کیا گیا ہے جس میں نچلے سوئچ بلاکس تک رسائی نہیں ہے یا جب ہدایات استعمال نہیں کی جاتی ہیں، مثال کے طور پر، جب قسم باطل کے ساتھ فنکشنز کو کال کرتے ہیں؛
  • 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 بیک اینڈ میں شامل کر دیا گیا ہے، فنکشن کالنگ کی صلاحیتیں بطور ڈیفالٹ فعال ہوتی ہیں، اور ایک مشترکہ پاس کو چالو کیا جاتا ہے۔ ڈی پی پی (ڈیٹا متوازی پرائمیٹوز)۔

  • ایل ایل ڈی بی ڈیبگر میں اب بیک ٹریسز کے لیے کلر ہائی لائٹنگ ہے اور DWARF4 debug_types اور DWARF5 debug_info بلاکس کے لیے سپورٹ شامل ہے۔
  • COFF فارمیٹ میں آبجیکٹ اور ایگزیکیوٹیبل فائلوں کے لیے سپورٹ کو llvm-objcopy اور llvm-strip یوٹیلیٹیز میں شامل کیا گیا ہے۔

ماخذ: opennet.ru

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