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

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

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

  • پہلے سے طے شدہ C++/ObjC++ معیار gnu++17 (پہلے gnu++14) ہے، جس کا مطلب ہے کہ GNU ایکسٹینشن کے ساتھ C++17 فیچرز ڈیفالٹ کے ذریعے سپورٹ ہوتے ہیں۔ پچھلے رویے کو واپس کرنے کے لیے، آپ "-std=gnu++14" آپشن استعمال کر سکتے ہیں۔
  • C++20 معیار سے متعلق جدید خصوصیات کو نافذ کیا گیا:
    • مشروط طور پر معمولی خصوصی ممبر کے افعال،
    • لیمبڈا فنکشنز میں سٹرکچرڈ بائنڈنگز کیپچر کرنا،
    • اظہار کے اندر مساوات آپریٹر،
    • کچھ سیاق و سباق میں ٹائپ نیم کلیدی لفظ کو چھوڑنے کا اختیار،
    • قوسین میں درست مجموعی ابتداء ("Aggr(val1, val2)")۔
  • مستقبل کے C++2b معیار میں بیان کردہ خصوصیات کو لاگو کر دیا گیا ہے:
    • مرکب اظہار کے آخر میں لیبل لگانے کی اجازت ہے،
    • جامد آپریٹر()
    • جامد آپریٹر[]،
    • char8_t قسم کے ساتھ مطابقت کو یقینی بنایا گیا ہے،
    • "\N{...}" میں استعمال کے لیے حروف کی حد کو بڑھا دیا گیا ہے۔
    • constexpr کے طور پر اعلان کردہ افعال میں "static constexpr" کے طور پر اعلان کردہ متغیرات کو استعمال کرنے کی صلاحیت شامل کی گئی۔
  • مستقبل کے C-standard C2x میں بیان کردہ خصوصیات کو لاگو کر دیا گیا ہے:
    • "-Wunused-label" وارننگ کو غیر فعال کرنے کے لیے، "[[شاید_غیر استعمال شدہ]]" وصف کو لیبلز پر لاگو کرنے کی اجازت ہے۔
    • اسے مرکب اظہار کے اندر کہیں بھی لیبل لگانے کی اجازت ہے،
    • typeof اور typeof_unqual آپریٹرز کو شامل کیا گیا،
    • ایک نئی قسم nullptr_t اور ایک nullptr مسلسل null پوائنٹرز کی وضاحت کرنے کے لیے جو کسی بھی پوائنٹر کی قسم میں تبدیل ہو سکتا ہے اور NULL کی ایک ایسی قسم کی نمائندگی کرتا ہے جو عددی اور void* اقسام کا پابند نہیں ہے۔
    • C2x موڈ میں، va_start میکرو کو متغیر نمبر دلائل (متغیر) کے ساتھ کال کرنے کی اجازت ہے۔
  • C99، C11، اور C17 تعمیل کے طریقوں میں، پہلے سے طے شدہ اختیارات "-Wimplicit-function-declaration" اور "-Wimplicit-int" اب انتباہ کے بجائے ایک خرابی پیدا کرتے ہیں۔
  • C++ موڈ میں "void *" (جیسے "void func(void *p) { *p; }") کا بالواسطہ استعمال اب ISO C++، GCC، ICC اور MSVC کی طرح ایک خرابی پیدا کرتا ہے۔
  • مائیکروسافٹ طرز کے ان لائن اسمبلی بلاکس میں بٹ فیلڈز کو بطور انسٹرکشن آپرینڈز (جیسے "__asm ​​{ mov eax, s.bf }") بتانا اب ایک خرابی پیدا کرتا ہے۔
  • مختلف ماڈیولز میں ایک جیسے ناموں کے ساتھ مختلف ڈھانچے اور یونینوں کی موجودگی کے لیے تشخیصی شامل کیے گئے۔
  • OpenCL اور OpenMP سپورٹ سے وابستہ صلاحیتوں کو بڑھا دیا گیا ہے۔ OpenCL کرنل آرگیومینٹس میں استعمال ہونے والے C++ ٹیمپلیٹس کے لیے بہتر تشخیص۔ AMDGPU کے لیے قطار میں لگنے والے بلاک سپورٹ میں بہتری۔ nounwind وصف کو تمام افعال میں واضح طور پر شامل کیا جاتا ہے۔ بلٹ ان فنکشنز کے لیے بہتر سپورٹ۔
  • ڈائرکٹری کی وضاحت کرنے کے لیے CLANG_CRASH_DIAGNOSTICS_DIR ماحولیاتی متغیر استعمال کرنے کی صلاحیت شامل کی گئی جس میں کریش تشخیصی ڈیٹا محفوظ کیا گیا ہے۔
  • یونیکوڈ سپورٹ کو یونیکوڈ 15.0 تفصیلات میں اپ ڈیٹ کر دیا گیا ہے۔ شناخت کنندگان میں کچھ ریاضی کی علامتوں کی اجازت ہے، جیسے "₊" (جیسے "ڈبل xₖ₊₁")۔
  • ایک سے زیادہ کنفیگریشن فائلوں کو لوڈ کرنے کے لیے سپورٹ شامل کیا گیا ہے (پہلے پہلے سے طے شدہ کنفیگریشن فائلیں لوڈ کی جاتی ہیں، اور پھر "--config=" فلیگ کے ذریعے مخصوص کی جاتی ہیں، جن کی اب متعدد بار وضاحت کی جا سکتی ہے)۔ کنفیگریشن فائلوں کے پہلے سے طے شدہ لوڈنگ آرڈر کو تبدیل کیا گیا: بجنا پہلے فائل کو لوڈ کرنے کی کوشش کرتا ہے - .cfg، اور اگر یہ نہیں ملتا ہے تو یہ دو فائلیں لوڈ کرنے کی کوشش کرتا ہے۔ .cfg اور .cfg ڈیفالٹ کی طرف سے لوڈنگ کنفیگریشن فائلوں کو غیر فعال کرنے کے لیے، "--no-default-config" جھنڈا شامل کیا گیا ہے۔
  • دہرائی جانے والی تعمیرات کو یقینی بنانے کے لیے، موجودہ تاریخ اور وقت کی قدروں کو __DATE__، __TIME__ اور __TIMESTAMP__ میکروز میں SOURCE_DATE_EPOCH ماحولیاتی متغیر میں بیان کردہ وقت کے ساتھ تبدیل کرنا ممکن ہے۔
  • بلٹ ان فنکشنز (بلٹن) کی موجودگی کو چیک کرنے کے لیے جو مستقل کے تناظر میں استعمال کیے جا سکتے ہیں، میکرو "__has_constexpr_builtin" کو شامل کیا گیا ہے۔
  • منسلک کوروٹین فریم ایلوکیشن کے لیے نیا تالیف پرچم "-fcoro-aligned-alocation" شامل کیا گیا۔
  • "-fstrict-flex-arrays=" جھنڈا ڈھانچے میں لچکدار صف کے عناصر کی تصدیق کے تیسرے درجے کے لیے تعاون کو لاگو کرتا ہے (لچکدار صف کے اراکین، ساخت کے آخر میں غیر معینہ سائز کی ایک صف)۔ تیسری سطح پر، صرف سائز "[]" (مثال کے طور پر، "int b[]") کو لچکدار صف سمجھا جاتا ہے، لیکن سائز "[0]" (مثال کے طور پر، "int b[0]") نہیں ہے.
  • معیاری C++ ماڈیولز کے لیے سنگل فیز کمپائلیشن ماڈل کو فعال کرنے کے لیے "-fmodule-output" جھنڈا شامل کیا گیا۔
  • اسٹیک فریم لے آؤٹ کے ساتھ مسائل کی تشخیص میں مدد کے لیے "-Rpass-analysis=stack-frame-layout" موڈ شامل کیا گیا۔
  • ایک نیا انتساب __attribute__((target_version("cpu_features"))) شامل کیا اور AArch1 کی طرف سے فراہم کردہ خصوصیات کے مخصوص ورژنز کو منتخب کرنے کے لیے __attribute__((target_clones("cpu_features2","cpu_features64",...))) کی فعالیت کو بڑھایا۔ سی پی یوز۔
  • تشخیصی ٹولز کی توسیع:
    • سنگل بٹ پر دستخط شدہ بٹ فیلڈ کو تفویض کرتے وقت مضمر کٹوتی کا پتہ لگانے کے لیے وارننگ "-Wsingle-bit-bitfield-constant-conversion" کو شامل کیا گیا۔
    • غیر شروع شدہ constexpr متغیرات کی تشخیص کو بڑھا دیا گیا ہے۔
    • فنکشن ٹائپ کاسٹنگ کے ساتھ ممکنہ مسائل کی نشاندہی کرنے کے لیے "-Wcast-function-type-strict" اور "-Wincompatible-function-pointer-types-strict" وارننگز شامل کی گئیں۔
    • ایکسپورٹ بلاکس میں غلط یا محفوظ ماڈیول کے ناموں کے استعمال کے لیے شامل کی گئی تشخیص۔
    • تعریفوں میں غائب "آٹو" کلیدی الفاظ کی بہتر کھوج۔
    • "-Winteger-overflow" وارننگ کے نفاذ نے اضافی حالات کے لیے چیکس کا اضافہ کیا ہے جو اوور فلو کا باعث بنتے ہیں۔
  • LoongArch انسٹرکشن سیٹ آرکیٹیکچر (-march=loongarch64 یا -march=la464) کے لیے لاگو سپورٹ، جو Loongson 3 5000 پروسیسرز میں استعمال ہوتا ہے اور MIPS اور RISC-V کی طرح نئے RISC ISA کو نافذ کرتا ہے۔

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

  • LLVM کوڈ کو C++17 معیار میں بیان کردہ عناصر استعمال کرنے کی اجازت ہے۔
  • ایل ایل وی ایم کی تعمیر کے لیے ماحولیات کی ضروریات میں اضافہ کیا گیا ہے۔ تعمیراتی ٹولز کو اب C++17 معیار کی حمایت کرنی چاہیے، یعنی بنانے کے لیے، آپ کو کم از کم GCC 7.1، کلینگ 5.0، Apple Clang 10.0 یا Visual Studio 2019 16.7 کی ضرورت ہے۔
  • AArch64 فن تعمیر کے لیے بیک اینڈ Cortex-A715، Cortex-X3 اور Neoverse V2 CPUs، RME MEC (میموری انکرپشن سیاق و سباق)، Armv8.3 ایکسٹینشنز (کمپلیکس نمبر) اور فنکشن ملٹی ورژننگ کے لیے اسمبلر کا اضافہ کرتا ہے۔
  • ARM فن تعمیر کے پس منظر میں، Armv2، Armv2A، Armv3 اور Armv3M ٹارگٹ پلیٹ فارمز کے لیے سپورٹ کو بند کر دیا گیا ہے، جس کے لیے درست کوڈ کی تخلیق کی ضمانت نہیں دی گئی تھی۔ پیچیدہ نمبروں کے ساتھ کام کرنے کے لیے ہدایات کے لیے کوڈ تیار کرنے کی صلاحیت شامل کی گئی۔
  • X86 فن تعمیر کے پس منظر نے انسٹرکشن سیٹ آرکیٹیکچرز (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT کے لیے تعاون شامل کیا ہے۔ RDMSRLIST، RMSRLIST اور WRMSRNS ہدایات کے لیے تعاون شامل کر دیا گیا۔ نافذ کردہ اختیارات "-mcpu=raptorlake"، "-mcpu=meteorlake"، "-mcpu=emeraldrapids"، "-mcpu=sierraforest"، "-mcpu=graniterapids" اور "-mcpu=grandridge"۔
  • لونگ آرچ پلیٹ فارم کے لیے باضابطہ تعاون شامل کیا گیا۔
  • MIPS، PowerPC اور RISC-V فن تعمیر کے لیے بہتر بیک اینڈ
  • LLDB ڈیبگر میں LoongArch فن تعمیر کے لیے 64-bit executables کو ڈیبگ کرنے کے لیے معاونت شامل کی گئی۔ COFF ڈیبگ علامتوں کی بہتر ہینڈلنگ۔ لوڈ شدہ ونڈوز ماڈیولز کی فہرست میں ڈپلیکیٹ DLLs کی فلٹرنگ فراہم کی گئی۔
  • Libc++ لائبریری میں، بنیادی کام C++20 اور C++23 معیارات کی نئی خصوصیات کے لیے سپورٹ کو نافذ کرنے پر مرکوز تھا۔
  • ایل ڈی ڈی لنکر ایڈریس ری لوکیشن اسکیننگ اور سیکشن انیشیلائزیشن آپریشنز کو متوازی کرکے لنکنگ کے وقت کو نمایاں طور پر کم کرتا ہے۔ ZSTD الگورتھم کا استعمال کرتے ہوئے سیکشن کمپریشن کے لیے تعاون شامل کیا گیا۔

ماخذ: opennet.ru

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