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

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

کلینگ 15.0 میں اہم بہتری:

  • x86 فن تعمیر پر مبنی سسٹمز کے لیے، "-fzero-call-used-regs" جھنڈا شامل کیا گیا ہے، جو اس بات کو یقینی بناتا ہے کہ فنکشن میں استعمال ہونے والے تمام CPU رجسٹرز کو فنکشن سے کنٹرول واپس کرنے سے پہلے صفر پر دوبارہ ترتیب دیا گیا ہے۔ یہ آپشن آپ کو فنکشنز سے معلومات کے رساو سے بچانے اور ROP (Return-Oriented Programming) گیجٹس کی تعمیر کے لیے موزوں بلاکس کی تعداد کو تقریباً 20% تک کم کرنے کی اجازت دیتا ہے۔
  • C کوڈ کے لیے ڈھانچے کی میموری پلیسمنٹ کی رینڈمائزیشن کو لاگو کیا گیا ہے، جو کمزوریوں کے استحصال کی صورت میں ڈھانچے سے ڈیٹا کے اخراج کو پیچیدہ بناتا ہے۔ randomize_layout اور no_randomize_layout کی خصوصیات کا استعمال کرتے ہوئے رینڈمائزیشن کو آن اور آف کیا جاتا ہے، اور اس کے لیے "-frandomize-layout-seed" یا "-frandomize-layout-seed-file" پرچم کا استعمال کرتے ہوئے ایک بیج ترتیب دینے کی ضرورت ہوتی ہے۔
  • شامل کیا گیا "-fstrict-flex-arrays=" پرچم "، جس کے ساتھ آپ ڈھانچے میں لچکدار صف کے عنصر کے لیے حدود کو کنٹرول کر سکتے ہیں (لچکدار صف کے اراکین، ساخت کے آخر میں غیر معینہ سائز کی ایک صف)۔ جب 0 (پہلے سے طے شدہ) پر سیٹ کیا جاتا ہے، تو ایک صف کے ساتھ ڈھانچے کے آخری عنصر کو ہمیشہ ایک لچکدار صف کے طور پر پروسیس کیا جاتا ہے، 1 - صرف سائز []، [0] اور [1] کو لچکدار صف کے طور پر پروسیس کیا جاتا ہے، 2 - صرف سائز [] اور [0] کو ایک لچکدار صف کی طرح پروسیس کیا جاتا ہے۔
  • سی جیسی زبان HLSL (High-level Shader Language) کے لیے تجرباتی معاونت شامل کی گئی، جو شیڈر لکھنے کے لیے DirectX میں استعمال ہوتی ہے۔
  • فکسڈ اور متغیر کی لمبائی والی صفوں سے وابستہ غیر مطابقت پذیر دلیل کے اعلانات کے ساتھ اوور رائیڈنگ فنکشنز کے بارے میں خبردار کرنے کے لیے "-Warray-parameter" کو شامل کیا گیا۔
  • MSVC کے ساتھ بہتر مطابقت۔ MSVC میں فراہم کردہ "#pragma فنکشن" (کمپلر کو ان لائن ایکسپینشن کے بجائے فنکشن کال بنانے کی ہدایت کرتا ہے) اور "#pragma alloc_text" (فنکشن کوڈ کے ساتھ سیکشن کا نام بیان کرتا ہے) کے لیے اضافی تعاون۔ MSVC-مطابقت /JMC اور /JMC جھنڈوں کے لیے شامل کردہ تعاون۔
  • مستقبل کے C2X اور C++23 معیارات کی حمایت کے لیے کام جاری ہے۔ C زبان کے لیے، درج ذیل کو لاگو کیا جاتا ہے: noreturn انتساب، مطلوبہ الفاظ غلط اور سچے، _BitInt(N) قسم دی گئی بٹ گہرائی کے عدد کے لیے، *_WIDTH میکروز، UTF-8 انکوڈ شدہ حروف کے لیے u8 سابقہ۔

    C++ کے لیے، درج ذیل کو لاگو کیا جاتا ہے: ماڈیول کا انضمام، فنکشن کے اراکین کی ABI الگ تھلگ، ماڈیولز میں غیر مقامی متغیرات کی متحرک ابتداء، کثیر جہتی انڈیکس آپریٹرز، آٹو(x)، غیر لغوی متغیرات، گوٹو اور لیبلز کو کانسٹیس ایکسپر قرار دیا گیا , delimited escape sequences، نام escape حروف۔

  • OpenCL اور OpenMP سپورٹ سے وابستہ صلاحیتوں کو بڑھا دیا گیا ہے۔ OpenCL ایکسٹینشن cl_khr_subgroup_rotate کے لیے تعاون شامل کر دیا گیا۔
  • x86 فن تعمیر کے لیے، غیر مشروط فارورڈ جمپ آپریشنز کے بعد ہدایات پر قیاس آرائی پر عمل درآمد کی وجہ سے پروسیسرز میں کمزوریوں کے خلاف تحفظ شامل کیا گیا ہے۔ یہ مسئلہ میموری میں برانچ انسٹرکشن (SLS، Straight Line Speculation) کے فوراً بعد ہدایات کی پیشگی پروسیسنگ کی وجہ سے ہوتا ہے۔ تحفظ کو فعال کرنے کے لیے، آپشن "-mharden-sls=[none|all|return|indirect-jmp]" تجویز کیا گیا ہے۔
  • ایسے پلیٹ فارمز کے لیے جو SSE2 ایکسٹینشن کو سپورٹ کرتے ہیں، _Float16 قسم کو شامل کیا گیا ہے، جو AVX512-FP16 ہدایات کے لیے سپورٹ کی کمی کی صورت میں فلوٹ ٹائپ کا استعمال کرتے ہوئے ایمولیٹ کیا جاتا ہے۔
  • RDPRU ہدایات کے استعمال کو کنٹرول کرنے کے لیے "-m[no-]rdpru" جھنڈا شامل کیا گیا، AMD Zen2 پروسیسرز کے ساتھ شروع ہونے میں تعاون یافتہ۔
  • RETBLEED خطرے سے بچانے کے لیے "-mfunction-return=thunk-extern" جھنڈا شامل کیا گیا، جو ہدایات کی ایک ترتیب کو شامل کرکے کام کرتا ہے جو بالواسطہ شاخوں کے لیے قیاس آرائی کے عمل کے طریقہ کار کی شمولیت کو خارج کرتا ہے۔

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

  • Cortex-M85 CPU، Armv9-A، Armv9.1-A اور Armv9.2-A آرکیٹیکچرز، Armv8.1-M PACBTI-M ایکسٹینشنز کے لیے شامل کردہ تعاون۔
  • DirectX کے لیے ایک تجرباتی بیک اینڈ شامل کیا گیا ہے جو DirectX شیڈرز کے لیے استعمال ہونے والے DXIL (DirectX انٹرمیڈیٹ لینگویج) فارمیٹ کو سپورٹ کرتا ہے۔ بیک اینڈ کو اسمبلی کے دوران "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" پیرامیٹر بتا کر فعال کیا جاتا ہے۔
  • Libc++ C++20 اور C++2b معیارات کی نئی خصوصیات کو نافذ کرنا جاری رکھے ہوئے ہے، جس میں "فارمیٹ" لائبریری کے نفاذ اور "رینجز" لائبریری کے مجوزہ تجرباتی ورژن کی تکمیل شامل ہے۔
  • x86، PowerPC اور RISC-V آرکیٹیکچرز کے لیے بہتر بیک اینڈ۔
  • LLD لنکر اور LLDB ڈیبگر کی صلاحیتوں کو بڑھا دیا گیا ہے۔

ماخذ: opennet.ru

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