چھ ماہ کی ترقی کے بعد، LLVM 22.1.0 جاری کیا گیا ہے۔ یہ ایسے ٹولز (مرتب کرنے والے، اصلاح کرنے والے، اور کوڈ جنریٹر) تیار کرتا ہے جو پروگراموں کو RISC جیسی ورچوئل ہدایات کے انٹرمیڈیٹ بٹ کوڈ میں مرتب کرتا ہے (ایک کم سطحی ورچوئل مشین جس میں ملٹی لیول آپٹیمائزیشن سسٹم ہوتا ہے)۔ تیار کردہ pseudocode کو ایک دیئے گئے ٹارگٹ پلیٹ فارم کے لیے مشین کوڈ میں تبدیل کیا جا سکتا ہے یا پروگرام کے عمل کے دوران براہ راست مشین کی ہدایات تیار کرنے کے لیے صرف ان ٹائم (JIT) کمپائلر کے ذریعے استعمال کیا جا سکتا ہے۔ LLVM ٹیکنالوجیز کی بنیاد پر، پراجیکٹ C، C++، اور Objective-C پروگرامنگ زبانوں کو سپورٹ کرتے ہوئے Clang کمپائلر تیار کر رہا ہے۔ 18.x برانچ سے شروع کرتے ہوئے، پروجیکٹ نے ایک نئے ورژن نمبرنگ اسکیم میں تبدیل کیا، جس کے مطابق ریلیز 0 ("N.0") کو ترقی کے دوران استعمال کیا جاتا ہے، اور پہلے مستحکم ورژن کا نمبر "N.1" ہے۔
بجنا 22 میں بہتری میں شامل ہیں:
- ایک منفرد شناخت کنندہ کے ساتھ malloc جیسے فنکشنز کا استعمال کرتے ہوئے میموری ایلوکیشن آپریشنز کو نشان زد کرنے کے لیے میموری ایلوکیشن ٹوکنز (Allocation Tokens) کے لیے معاونت شامل کی گئی۔ مختص ٹوکن ڈھیر کی معلومات کی ساخت بنانے، میموری کے اخراج کا پتہ لگانے کو آسان بنانے، اور ان کے مقصد یا ترمیم کے نمونوں کی بنیاد پر اشیاء کی گروپ بندی کو فعال کرنے کی اجازت دیتے ہیں (مثال کے طور پر، "گرم" کو "ٹھنڈے" ڈیٹا سے الگ کرنا)۔ فعال کرنے کے لیے، "-fsanitize=alloc-token" جھنڈا استعمال کریں۔
- سی زبان سے متعلق خصوصیات:
- "موخر" عمل درآمد کے طریقہ کار کی وضاحت کرنے والے ایک مسودہ کی وضاحت کو نافذ کیا گیا ہے، جو موجودہ دائرہ کار سے باہر ہونے پر کارروائیوں کو انجام دینے کی اجازت دیتا ہے۔ "ڈیفر" سپورٹ کو فعال کرنے کے لیے "-fdefer-ts" جھنڈا شامل کیا گیا ہے۔
- بلٹ ان فنکشن __builtin_stack_address() کو شامل کیا گیا ہے، جو جی سی سی میں اسی طرح کے فنکشن کی عکاسی کرتا ہے۔ یہ فنکشن موجودہ فنکشن کے اسٹیک ایریا کو الگ کرتے ہوئے اسٹیک ایڈریس کو لوٹاتا ہے جسے __builtin_stack_address() کہا جاتا ہے اور اس کے بعد کے فنکشنز جو اسے کال کرتا ہے۔
- مستقبل کے C2y معیار کے لیے صلاحیتیں تیار کی جا رہی ہیں:
- نامزد لوپس کے لیے سپورٹ شامل کیا گیا، جو آپ کو لوپس کو نام تفویض کرنے اور اسٹیٹمنٹس کو تبدیل کرنے کی اجازت دیتا ہے، جن کو وقفے میں بیان کیا جا سکتا ہے اور بیانات جاری رکھ سکتے ہیں تاکہ باہر نکلنے کے لیے لوپ کو واضح طور پر بیان کیا جا سکے۔ بیرونی: (int i = 0؛ i < IK؛ ++ i) { کے لیے (int j = 0؛ j < JK؛ ++ j) { جاری رکھیں؛ // CONT1 پر جائیں بیرونی جاری رکھیں؛ // CONT2 پر جائیں // CONT1 } // CONT2 }
- بلٹ ان "__COUNTER__" میکرو کا نفاذ، جو منفرد شناخت کنندہ کے نام پیدا کرنے کے لیے ڈیزائن کیا گیا ہے، کو بڑھا دیا گیا ہے اور اسے معیار میں شامل کر دیا گیا ہے۔ اس میکرو پر 2147483647 کالز کی حد مقرر کی گئی ہے۔ اس حد سے تجاوز کرنے سے ایک خرابی پیدا ہوگی۔
- انتباہ کو ہٹا دیا گیا (-Wstatic-in-inline) جب جامد فنکشنز یا فنکشنز کے اندر متغیرات کو "بیرونی ان لائن" قرار دیا گیا ہے۔
- C23 C معیار میں بیان کردہ صلاحیتیں:
- float.h ہیڈر فائل اب FLT_SNAN، DBL_SNAN، اور LDBL_SNAN میکروز کو سپورٹ کرتی ہے، جو فلوٹ، ڈبل اور لمبی ڈبل قسموں کے لیے سگنلڈ (ریاضی کے کاموں میں استعمال ہونے پر ایک استثناء کا سبب بنتی ہے) NaN اقدار کو نافذ کرتی ہے۔
- ایک بگ کو ٹھیک کیا جہاں مختلف بے نام اقسام کو ایک ہی ٹرانسلیشن یونٹ کے اندر ہم آہنگ سمجھا جاتا تھا اگر ان میں ایک ہی فیلڈز ہوں۔
- انحصار اسکیننگ کے دوران گمشدہ ہیڈر فائلوں کو نظر انداز کرنے کے لیے استعمال ہونے والے "-MG" جھنڈے کو "#embed" ہدایت تک بڑھا دیا گیا ہے اور اب "#embed" ہدایت میں مخصوص فائل کے غائب ہونے پر "فائل نہیں ملی" کی غلطی کو دباتا ہے۔
- C++ متعلقہ خصوصیات:
- "constexpr" سیاق و سباق میں ساختی پابندیوں کو استعمال کرنے کی صلاحیت، جیسا کہ C++2c (C++26) تفصیلات میں تیار کیا گیا ہے، شامل کیا گیا ہے۔ اس کا مطلب یہ ہے کہ مستقل اظہار کے حوالے اب خود مستقل اظہار ہوسکتے ہیں۔ سپورٹ کو صفوں اور سادہ ڈھانچے کے لیے لاگو کیا جاتا ہے (ٹپلس ابھی تک تعاون یافتہ نہیں ہیں)۔ constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- جیسا کہ C++20 معیار کی ضرورت ہے، رکاوٹوں کو اب چیک کیے جانے سے پہلے معیاری شکل میں تبدیل کر دیا جاتا ہے، جس سے زیادہ درست تشخیصی پیغامات اور صرف تصور ids میں استعمال ہونے والے ٹیمپلیٹ آرگیومنٹس میں متبادل کی غلطیوں کو مناسب طریقے سے ہینڈل کیا جا سکتا ہے۔
- یہ معلوم کرنے کے لیے کہ آیا موازنہ آپریٹرز "<" ">", "<="، اور ">=" کو "<=>" آپریٹر سے ترکیب کیا گیا تھا یا نہیں، بلٹ ان فنکشنز "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" کا ایک خاندان شامل کیا۔
- "-Wincompatible-pointer-types" پیرامیٹر کو انتباہ کے بجائے ایک غلطی پیدا کرنے کے لیے تبدیل کر دیا گیا ہے۔ پچھلے رویے پر واپس جانے کے لیے، "-Wno-error=incompatible-pointer-types" کا اختیار استعمال کریں۔
- بلٹ ان فنکشنز __builtin_bswapg، __builtin_elementwise_ldexp، __builtin_elementwise_fshl، __builtin_elementwise_fshr، __builtin_elementwise_minnumnum، __builtin_elementwise_maxnumnum، __builtin_elementwise_maxnumnum، __builtin_explooded، __builtin_explooded __builtin_masked_store، __builtin_masked_compress_store، __builtin_masked_gather، __builtin_masked_scatter، اور __builtin_dedup_pack۔ مثال کے طور پر، buildin_dedup_pack آپ کو اقسام کی فہرست سے نقلیں ہٹانے کی اجازت دیتا ہے: MyTypeList = TypeList<__builtin_dedup_pack کا استعمال کرتے ہوئے …> // نتیجے کی قسم TypeList ہوگی۔
- UBSan (-fsanitize=undefined -fsanitize-trap=undefined) کے ساتھ غیر متعینہ رویے کو ڈیبگ کرتے وقت، خرابی کی وجہ کی معلومات اب پیدا شدہ ڈیبگ معلومات میں شامل ہوتی ہے۔ "-fsanitize-debug-trap-reasons" جھنڈا غلطی کی معلومات میں تفصیل کی سطح کو بتانے کے لیے شامل کیا گیا ہے۔ اسے عام وضاحتوں کے لیے "بنیادی" پر سیٹ کیا جا سکتا ہے (مثلاً، "انٹیجر کا اضافہ اوور فلو") اور تفصیلی معلومات کو شامل کرنے کے لیے "تفصیلی" پر سیٹ کیا جا سکتا ہے (مثلاً، "'a + b' میں انٹیجر کے اضافے کے اوور فلو پر دستخط کیے گئے")۔
- نئے مرتب کرنے والے جھنڈے شامل کیے گئے:
- "-f[no-]sanitize-debug-trap-reasons" کو کنٹرول کرنے کے لیے کہ آیا "-fsanitize-trap" موڈ کے ساتھ مرتب کرتے وقت استثنیٰ ٹریپ وجوہات ڈیبگ معلومات میں سرایت کرتی ہیں۔
- "-fsanitize=alloc-token"، "-falloc-token-max"، "-fsanitize-alloc-token-fast-abi"، اور "-fsanitize-alloc-token-extended" میموری ایلوکیشن ٹوکنز کو منظم کرنے کے لیے۔
- میٹرکس کی اقسام کے میموری لے آؤٹ کو کنٹرول کرنے کے لیے "-fmatrix-memory-layout" (مثال کے طور پر کالم-میجر کے لئے کالم-میجر، قطار-میجر کے لئے رو-میجر)۔
- فنکشنز میں اب ایک "malloc_span" وصف ہے، جو malloc انتساب کی طرح ہے لیکن ان فنکشنز پر لاگو ہوتا ہے جو اسپین کی طرح کے ڈھانچے کو واپس کرتے ہیں جس میں پوائنٹر اور سائز کے ساتھ ایک فیلڈ یا بلاک کے آخر تک پوائنٹر ہوتا ہے۔
- "modular_format" وصف کو متحرک طور پر منتخب کرنے کے لیے شامل کیا گیا تاکہ لنک کے وقت printf فنکشن کے مطلوبہ statically منسلک نفاذ کو منتخب کیا جا سکے۔
- تشخیصی اور جامد تجزیہ کے آلات کو بڑھا دیا گیا ہے، نئے چیک شامل کیے گئے ہیں (تشخیص سے متعلق کئی درجن بہتری)۔
- SSE، AVX، اور AVX512 ایکسٹینشنز کے لیے اضافی اندرونی چیزیں X86 بیک اینڈ میں شامل کر دی گئی ہیں۔ وائلڈ کیٹ لیک (-march=wildcatlake) اور Nova Lake (-march=novalake) مائیکرو آرکیٹیکچرز پر مبنی Intel CPUs کے لیے بلڈ موڈز شامل کیے گئے ہیں۔
- AArch64 بیک اینڈ اب Ampere Computing Ampere1C (ampere1c)، Arm C1-Nano (c1-nano)، Arm C1-Pro (c1-pro)، Arm C1-Premium (c1-premium)، اور Arm C1-Ultra (c1-ultra) پروسیسرز کو سپورٹ کرتا ہے۔ FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], اور FCVTA[US] ہدایات کے لیے اضافی بلٹ ان فنکشنز شامل کیے گئے ہیں۔ فنکشن ملٹی ورژننگ (FMV) سپورٹ کو مستحکم کر دیا گیا ہے۔ صارفین اب مختلف فنکشن ورژن کی ترجیح کو اوور رائیڈ کر سکتے ہیں۔
- LoongArch32 (LA32R، LA32S) فن تعمیر کے لیے شامل کردہ تعاون۔
- ARM، AMDGPU، RISC-V، LoongArch64، MIPS، WebAssembly، اور PowerPC آرکیٹیکچرز کے لیے بہتر بیک اینڈز۔
ماخذ: opennet.ru
