GCC 12 کمپائلر سویٹ کی ریلیز

ایک سال کی ترقی کے بعد، مفت کمپائلر سویٹ GCC 12.1 جاری کر دیا گیا ہے، جو کہ نئی GCC 12.x برانچ میں پہلی اہم ریلیز ہے۔ نئی ریلیز نمبرنگ اسکیم کے مطابق، ورژن 12.0 کو ترقی کے عمل میں استعمال کیا گیا تھا، اور GCC 12.1 کی ریلیز سے کچھ دیر پہلے، GCC 13.0 برانچ پہلے ہی بند ہو چکی تھی، جس کی بنیاد پر اگلی بڑی ریلیز، GCC 13.1، ہو جائے گی۔ تشکیل دیا جائے. 23 مئی کو یہ منصوبہ جی سی سی کے پہلے ایڈیشن کے قیام کے 35 سال منائے گا۔

اہم تبدیلیاں:

  • CTF (Compact Type Format) ڈیبگنگ فارمیٹ کے لیے شامل کیا گیا تعاون، جو C اقسام، فنکشنز اور ڈیبگنگ سمبلز کے درمیان کنکشن کے بارے میں معلومات کا کمپیکٹ اسٹوریج فراہم کرتا ہے۔ ELF اشیاء میں سرایت کرنے پر، فارمیٹ ڈیٹا کی نقل سے بچنے کے لیے EFL کریکٹر ٹیبلز کے استعمال کی اجازت دیتا ہے۔
  • 1980 کی دہائی میں بنائے گئے "STABS" ڈیبگنگ انفارمیشن اسٹوریج فارمیٹ کے لیے سپورٹ کو فرسودہ کر دیا گیا ہے۔
  • C اور C++ زبانوں کے لیے مستقبل کے C2X اور C++23 معیارات کے لیے تعاون کو بڑھانے کے لیے کام جاری ہے۔ مثال کے طور پر، "if consteval" اظہار کے لیے حمایت شامل کی گئی ہے۔ فنکشن آرگیومینٹس میں آٹو استعمال کرنے کی اجازت ہے ("f(auto(g()))")؛ غیر لغوی متغیرات، گوٹو اور لیبلز کے استعمال کی اجازت ہے جو کہ constexpr کے طور پر اعلان کردہ فنکشنز میں ہیں؛ کثیر جہتی انڈیکس آپریٹرز آپریٹر کے لیے اضافی تعاون[]؛ اگر، کے لیے اور سوئچ میں، انیشیلائزیشن بلاکس کی صلاحیتوں کو بڑھا دیا گیا ہے ("for (T = int کا استعمال کرتے ہوئے؛ T e : v)")۔
  • C++ معیاری لائبریری نے C++20 اور C++ 23 معیارات کے تجرباتی حصوں کے لیے سپورٹ کو بہتر بنایا ہے۔ std::move_only_function، ، std::basic_string::resize_and_overwrite، ، اور std::invoke_r کے لیے تعاون شامل کیا گیا۔ std::unique_ptr، std::vector، std::basic_string، std::optional اور std::variant constexpr فنکشنز میں استعمال کرنے کی اجازت ہے۔
  • فورٹران فرنٹ اینڈ TS 29113 تفصیلات کے لیے مکمل تعاون فراہم کرتا ہے، جو Fortran اور C کوڈ کے درمیان پورٹیبلٹی کو یقینی بنانے کی صلاحیتوں کو بیان کرتا ہے۔
  • __builtin_shufflevector(vec1, vec2, index1, index2, ...) ایکسٹینشن کے لیے پہلے سے Clang میں شامل کیا گیا تعاون شامل کیا گیا، جو عام ویکٹر شفل اور شفل آپریشنز کو انجام دینے کے لیے ایک ہی کال پیش کرتا ہے۔
  • "-O2" اصلاح کی سطح کا استعمال کرتے وقت، ویکٹرائزیشن کو بطور ڈیفالٹ فعال کیا جاتا ہے (-ftree-vectorize اور -fvect-cost-model= بہت سستے موڈز فعال ہیں)۔ انتہائی سستا ماڈل ویکٹرائزیشن کی اجازت صرف اسی صورت میں دیتا ہے جب ویکٹر کوڈ مکمل طور پر اسکالر کوڈ کی جگہ لے لے جو ویکٹرائز کیا جا رہا ہے۔
  • "-ftrivial-auto-var-init" موڈ شامل کیا گیا تاکہ اسٹیک پر متغیرات کی واضح ابتداء کو قابل بنایا جا سکے تاکہ مسائل کو ٹریک کیا جا سکے اور غیر شروع شدہ متغیرات کے استعمال سے وابستہ خطرات کو روکا جا سکے۔
  • C اور C++ زبانوں کے لیے، ایک بلٹ ان فنکشن __builtin_dynamic_object_size کسی چیز کے سائز کا تعین کرنے کے لیے شامل کیا گیا ہے، جو کلینگ سے ملتے جلتے فنکشن کے ساتھ مطابقت رکھتا ہے۔
  • C اور C++ زبانوں کے لیے، "غیر دستیاب" وصف کے لیے سپورٹ شامل کر دیا گیا ہے (مثال کے طور پر، آپ ان فنکشنز کو نشان زد کر سکتے ہیں جو اگر آپ ان کو استعمال کرنے کی کوشش کریں تو غلطی پیدا کریں گے)۔
  • C اور C++ زبانوں کے لیے، "#elifdef" اور "#elifndef" کی ہدایات سے پہلے پروسیسنگ کے لیے تعاون شامل کیا گیا ہے۔
  • اگر UTF-8 حروف غلط طریقے سے استعمال کیے گئے ہیں تو انتباہ ظاہر کرنے کے لیے "-Wbidi-chars" جھنڈا شامل کیا گیا، اس ترتیب کو تبدیل کر کے جس میں دو طرفہ متن ظاہر ہوتا ہے۔
  • ایک انتباہ ظاہر کرنے کے لیے "-Warray-compare" جھنڈا شامل کیا گیا جب دو آپرینڈز جو صفوں کا حوالہ دیتے ہیں کا موازنہ کرنے کی کوشش کرتے ہیں۔
  • اوپن ایم پی 5.0 اور 5.1 (اوپن ملٹی پروسیسنگ) معیارات کا نفاذ، جو مشترکہ میموری اور ویکٹرائزیشن یونٹس (SIMD) کے ساتھ ملٹی کور اور ہائبرڈ (CPU+GPU/DSP) سسٹمز پر متوازی پروگرامنگ کے طریقوں کو لاگو کرنے کے API اور طریقوں کی وضاحت کرتے ہیں۔ ، جاری ہے.
  • OpenACC 2.6 متوازی پروگرامنگ تفصیلات کا بہتر نفاذ، جو GPUs اور NVIDIA PTX جیسے خصوصی پروسیسرز پر آف لوڈنگ آپریشنز کے لیے ٹولز کی وضاحت کرتا ہے۔
  • توسیعی ہدایات کے لیے سپورٹ Intel AVX86-FP512 اور _Float16 قسم کو x16 فن تعمیر کے لیے کوڈ جنریشن بیک اینڈ میں شامل کر دیا گیا ہے۔
  • x86 فن تعمیر کے لیے، غیر مشروط فارورڈ جمپ آپریشنز کے بعد ہدایات پر قیاس آرائی پر عمل درآمد کی وجہ سے پروسیسرز میں کمزوریوں کے خلاف تحفظ شامل کیا گیا ہے۔ یہ مسئلہ میموری میں برانچ انسٹرکشن (SLS، Straight Line Speculation) کے فوراً بعد ہدایات کی پری ایمپٹیو پروسیسنگ کی وجہ سے ہوتا ہے۔ تحفظ کو فعال کرنے کے لیے، "-mharden-sls" آپشن تجویز کیا گیا ہے۔
  • تجرباتی جامد تجزیہ کار میں غیر شروع شدہ متغیرات کے استعمال کا پتہ لگانا شامل کیا گیا۔ ان لائن داخلوں میں اسمبلی کوڈ کا تجزیہ کرنے کے لیے ابتدائی مدد شامل کی گئی۔ بہتر میموری ٹریکنگ۔ پروسیسنگ سوئچ ایکسپریشنز کا کوڈ دوبارہ لکھا گیا ہے۔
  • libgccjit میں 30 نئی کالیں شامل کی گئیں، ایک کوڈ جنریٹر کو دوسرے پراسیس میں سرایت کرنے اور اسے JIT کے لیے استعمال کرنے کے لیے ایک مشترکہ لائبریری۔
  • BPF بائیک کوڈ بنانے کے لیے CO-RE (Compile One - Run Everywhere) میکانزم کو بیک اینڈ میں شامل کیا گیا ہے، جس کی مدد سے آپ لینکس کرنل کے لیے eBPF پروگراموں کا کوڈ صرف ایک بار مرتب کر سکتے ہیں اور ایک خصوصی یونیورسل لوڈر استعمال کر سکتے ہیں جو کہ آپ کو اپنی مرضی کے مطابق بنائے۔ موجودہ دانا اور BPF اقسام کی شکل میں لوڈ شدہ پروگرام)۔ CO-RE مرتب شدہ eBPF پروگراموں کی پورٹیبلٹی کے مسئلے کو حل کرتا ہے، جو پہلے صرف دانا کے اس ورژن میں استعمال کیا جا سکتا تھا جس کے لیے وہ مرتب کیے گئے تھے، کیونکہ ڈیٹا ڈھانچے میں عناصر کی پوزیشن ورژن سے ورژن میں تبدیل ہوتی ہے۔
  • RISC-V بیک اینڈ نئے انسٹرکشن سیٹ آرکیٹیکچر ایکسٹینشنز zba, zbb, zbc اور zbs کے ساتھ ساتھ ویکٹر اور اسکیلر کرپٹوگرافک آپریشنز کے لیے ISA ایکسٹینشنز کے لیے سپورٹ شامل کرتا ہے۔ پہلے سے طے شدہ طور پر، RISC-V ISA 20191213 تفصیلات کے لیے سپورٹ فراہم کی جاتی ہے۔ -mtune=thead-c906 جھنڈا T-HEAD c906 cores کے لیے آپٹیمائزیشن کو فعال کرنے کے لیے شامل کیا گیا ہے۔
  • __int128_t/integer(kind=16) قسم کے لیے سپورٹ کو GCN مائیکرو آرکیٹیکچر پر مبنی AMD GPUs کے لیے کوڈ جنریشن بیک اینڈ میں شامل کیا گیا ہے۔ فی کمپیوٹنگ یونٹ (CU) تک 40 ورک گروپس اور 16 انسٹرکشن فرنٹ (ویو فرنٹ، SIMD انجن کے ذریعے متوازی طور پر دھاگوں کا ایک سیٹ) فی گروپ استعمال کرنا ممکن ہے۔ اس سے پہلے، فی CU صرف ایک انسٹرکشن ایج کی اجازت تھی۔
  • NVPTX بیک اینڈ، NVIDIA PTX (Parallel Thread Execution) انسٹرکشن سیٹ آرکیٹیکچر کا استعمال کرتے ہوئے کوڈ بنانے کے لیے ڈیزائن کیا گیا ہے، اس نے "-march"، "-mptx" اور "-march-map" جھنڈوں کو استعمال کرنے کی صلاحیت کو شامل کیا ہے۔ PTX ISA sm_53, sm_70, sm_75 اور sm_80 کے لیے نافذ کردہ تعاون۔ پہلے سے طے شدہ فن تعمیر sm_30 ہے۔
  • PowerPC/PowerPC64/RS6000 پروسیسرز کے پس منظر میں، بلٹ ان فنکشنز کے نفاذ کو دوبارہ لکھا گیا ہے۔ بلٹ ان فنکشنز __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_texasr اور دستاویزی ہیں۔
  • Arm Ampere-64 (-mcpu/-mtune ampere1)، Arm Cortex-A1 (cortex-a510)، Arm Cortex-A510 (cortex-a710) اور Arm Cortex-X710 (cortex-x2) کے لیے سپورٹ۔ "-march" آپشن کے ساتھ استعمال کرنے کے لیے نئے ARMv2 فن تعمیر کے اختیارات کے لیے تعاون شامل کیا گیا: armv8-a، armv8.7-a، armv8.8-a۔ توسیع شدہ ARM ہدایات (ls9) کے استعمال کی بنیاد پر ایٹم لوڈنگ اور ڈیٹا کو میموری میں محفوظ کرنے کے لیے کمپائلر (انٹرنکس) میں شامل C فنکشنز کا نفاذ۔ mopsoption ARM ایکسٹینشن کا استعمال کرتے ہوئے memcpy، memmove اور memset کے افعال کو تیز کرنے کے لیے معاونت شامل کی گئی۔
  • ایک نیا چیکنگ موڈ "-fsanitize=shadow-call-stack" (ShadowCallStack) شامل کیا گیا، جو فی الحال صرف AArch64 فن تعمیر کے لیے دستیاب ہے اور "-ffixed-r18" آپشن کے ساتھ کوڈ بناتے وقت کام کرتا ہے۔ موڈ اسٹیک پر بفر اوور فلو کی صورت میں کسی فنکشن سے واپسی کے پتے کو اوور رائٹ کرنے کے خلاف تحفظ فراہم کرتا ہے۔ پروٹیکشن کا جوہر یہ ہے کہ واپسی کے ایڈریس کو کسی فنکشن میں کنٹرول منتقل کرنے اور فنکشن سے باہر نکلنے سے پہلے اس ایڈریس کو دوبارہ حاصل کرنے کے بعد علیحدہ "شیڈو" اسٹیک میں محفوظ کیا جائے۔

ماخذ: opennet.ru

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