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

ترقی کے ایک سال بعد شائع کمپائلرز کے مفت سیٹ کی رہائی جی سی سی 9.1نئی GCC 9.x برانچ میں پہلی بڑی ریلیز۔ بمطابق نئی سکیم ریلیز نمبرز، ورژن 9.0 کو ترقی کے عمل میں استعمال کیا گیا تھا، اور GCC 9.1 کی ریلیز سے کچھ دیر پہلے، GCC 10.0 برانچ پہلے ہی بند ہو چکی تھی، جس کی بنیاد پر اگلی اہم ریلیز، GCC 10.1، تشکیل دی جائے گی۔

GCC 9.1 C++17 معیار کے لیے سپورٹ کو مستحکم کرنے کے لیے قابل ذکر ہے، مستقبل کے C++20 معیار (کوڈ نام C++2a) کی صلاحیتوں کو لاگو کرنے کے لیے، D زبان کے فرنٹ اینڈ میں شمولیت، OpenMP 5.0 کے لیے جزوی تعاون۔ اوپن اے سی سی 2.5 کے لیے تقریباً مکمل سپورٹ، بائنڈنگ اسٹیج پر انٹر پروسیجرل آپٹیمائزیشنز اور آپٹیمائزیشنز کی اسکیل ایبلٹی میں اضافہ، تشخیصی ٹولز کی توسیع اور نئے انتباہات کا اضافہ، OpenRISC، C-SKY V2 اور AMD GCN GPU کے لیے بیک اینڈ۔

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

  • ڈی پروگرامنگ لینگویج کے لیے شامل کردہ سپورٹ۔ GCC میں کمپائلر کے ساتھ فرنٹ اینڈ شامل ہے۔ GDC (Gnu D Compiler) اور رن ٹائم لائبریریاں (libphobos)، جو آپ کو D پروگرامنگ زبان میں پروگرام بنانے کے لیے معیاری GCC استعمال کرنے کی اجازت دیتی ہیں۔ GCC میں D زبان کی معاونت کو فعال کرنے کا عمل شروع ہو گیا ہے 2011 میں واپس، لیکن پر گھسیٹا کوڈ کو جی سی سی کی ضروریات کے مطابق لانے کی ضرورت اور ڈیجیٹل مریخ پر دانشورانہ املاک کے حقوق کی منتقلی کے ساتھ مسائل، جو ڈی پروگرامنگ لینگویج تیار کر رہا ہے۔
  • کوڈ جنریٹر میں بہتری لائی گئی ہے۔ مثال کے طور پر، حالات کے لحاظ سے سوئچ ایکسپریشنز (جمپ ٹیبل، بٹ ٹیسٹ، فیصلہ ٹری) کو بڑھانے کے لیے مختلف حکمت عملیوں کا استعمال نافذ کیا گیا ہے۔ لکیری فنکشنز کو تبدیل کرنے کی صلاحیت شامل کی گئی جس میں "-ftree-switch-conversion" آپٹیمائزیشن کا استعمال کرتے ہوئے ایک سوئچ ایکسپریشن شامل ہے (مثال کے طور پر، "کیس 2: کیسے = 205؛ بریک؛ کیس 3: کیسے = 305؛ بریک جیسے حالات کا ایک مجموعہ ;” کو "100 * کیسے + 5" میں تبدیل کیا جائے گا؛
  • بہتر انٹرپروسیجرل آپٹیمائزیشنز۔ ان لائن تعیناتی کی ترتیبات کو جدید C++ کوڈ بیسز کے لیے ڈھال لیا گیا ہے اور نئے پیرامیٹرز max-inline-insns-small, max-inline-insns-size, uninlined-function-ins, uninlined-function-time, uninlined-thunk-insns اور uninlined کے ساتھ توسیع کی گئی ہے۔ -تھنک ٹائم سرد/گرم کوڈ کی علیحدگی کی درستگی اور جارحیت میں بہتری۔ بہت بڑے کے لیے بہتر سکیل ایبلٹی ترجمہ یونٹس (مثال کے طور پر، بڑے پروگراموں کو لنک کرنے کے مرحلے پر اصلاح کا اطلاق کرتے وقت)
  • کوڈ پروفائلنگ (PGO - پروفائل گائیڈڈ آپٹیمائزیشن) کے نتائج پر مبنی اصلاحی طریقہ کار کو بہتر بنایا گیا ہے، جو کوڈ پر عمل درآمد کی خصوصیات کے تجزیہ کی بنیاد پر زیادہ بہترین کوڈ تیار کرتا ہے۔ خلاصہ اختیار "-fprofile-استعمال" اب آپٹیمائزیشن موڈز "-fversion-loops-for-strides"، "-floop-interchange"، "-floop-unroll-and-jam" اور "-ftree-loop-distribution" شامل ہیں۔ فائلوں میں کاؤنٹرز کے ساتھ ہسٹوگرام کی شمولیت کو ہٹا دیا، جس سے پروفائلز کے ساتھ فائلوں کا سائز کم ہو گیا (لنکنگ کے دوران آپٹیمائزیشن کرتے وقت ہسٹوگرام اب فلائی پر تیار ہوتے ہیں)؛
  • بہتر لنکنگ ٹائم آپٹیمائزیشن (LTO)۔ نتیجہ پیدا کرنے سے پہلے اقسام کی آسانیاں فراہم کی گئیں، جس نے LTO آبجیکٹ فائلوں کے سائز کو نمایاں طور پر کم کرنا، بائنڈنگ مرحلے پر میموری کی کھپت کو کم کرنا، اور آپریشنز کے متوازی عمل کو بہتر بنانا ممکن بنایا۔ پارٹیشنز کی تعداد (-param lto-partitions) کو 32 سے بڑھا کر 128 کر دیا گیا ہے، جو سی پی یو تھریڈز کی ایک بڑی تعداد والے سسٹمز پر کارکردگی کو بہتر بناتا ہے۔ اصلاحی عمل کی تعداد کو کنٹرول کرنے کے لیے ایک پیرامیٹر شامل کیا گیا ہے۔
    "-param lto-max-streaming-parelelism"؛

    نتیجے کے طور پر، جی سی سی 8.3 کے مقابلے میں، جی سی سی 9 میں متعارف کردہ اصلاحات اجازت دی Firefox 5 اور LibreOffice 66 کے تالیف کا وقت تقریباً 6.2.3% کم کریں۔ آبجیکٹ فائلوں کے سائز میں 7 فیصد کمی واقع ہوئی۔ 8 کور CPU پر بائنڈنگ ٹائم میں 11% کمی واقع ہوئی۔ لنکنگ مرحلے کا ترتیب وار اصلاح کا مرحلہ اب 28% تیز ہے اور 20% کم میموری استعمال کرتا ہے۔ LTO کے متوازی مرحلے کے ہر پروسیسر کی میموری کی کھپت میں 30% کی کمی واقع ہوئی ہے۔

  • زیادہ تر متوازی پروگرامنگ تفصیلات C, C++ اور Fortran زبانوں کے لیے لاگو کی جاتی ہیں۔ اوپن اے سی سی 2.5، جو GPUs اور خصوصی پروسیسرز جیسے NVIDIA PTX پر آف لوڈنگ آپریشنز کے لیے ٹولز کی وضاحت کرتا ہے۔
  • C اور C++ کے لیے معیار کے لیے جزوی تعاون نافذ کیا گیا ہے۔ اوپن ایم پی 5.0 (اوپن ملٹی پروسیسنگ)، جو مشترکہ میموری اور ویکٹرائزیشن یونٹس (SIMD) کے ساتھ ملٹی کور اور ہائبرڈ (CPU+GPU/DSP) سسٹمز پر C, C++ اور Fortran زبانوں کے لیے API اور متوازی پروگرامنگ کے طریقوں کو لاگو کرنے کے طریقوں کی وضاحت کرتا ہے۔ ;
  • C زبان کے لیے نئی وارننگز شامل کی گئی ہیں: "-پیکڈ ممبر کا ویڈریس" (کسی ڈھانچے یا یونین کے بھرے ممبر کے لئے غیر منسلک پوائنٹر ویلیو) اور
    «-Wabsolute-value" (ایک مطلق قدر کا حساب لگانے کے لیے فنکشنز تک رسائی کرتے وقت، اگر مخصوص دلیل کے لیے زیادہ موزوں فنکشن موجود ہو، مثال کے طور پر، abs(3.14) کی بجائے fabs(3.14) استعمال کیا جانا چاہیے۔ C++ کے لیے نئی وارننگز شامل کی گئیں: "-Wdeprecated-copy"،
    "-Winit-list-lifetime"، "-Wredundant-move"، "-Wpessimizing-move" اور "-Wclass-conversion"۔ بہت سے پہلے دستیاب انتباہات کو بڑھا دیا گیا ہے؛

  • مستقبل کے C زبان کے معیار کے حصے کے لیے تجرباتی تعاون شامل کیا گیا، کوڈ نام C2x۔ C2x سپورٹ کو فعال کرنے کے لیے، آپشنز "-std=c2x" اور "-std=gnu2x" (GNU ایکسٹینشنز کو فعال کرنے کے لیے) استعمال کریں۔ معیار اب بھی ترقی کے ابتدائی مرحلے میں ہے، اس لیے، اس کی صلاحیتوں میں، صرف ایک دلیل کے ساتھ _Static_assert کے اظہار کی حمایت کی جاتی ہے (C11 میں دو دلائل کے ساتھ _Static_assert معیاری ہے)؛
  • C++17 معیار کے لیے سپورٹ کو مستحکم قرار دیا گیا ہے۔ فرنٹ اینڈ میں، C++ 17 کی زبان کی صلاحیتیں مکمل طور پر لاگو ہوتی ہیں، اور libstdc++ میں، معیار میں بیان کردہ لائبریری کے افعال مکمل نفاذ کے قریب ہیں۔
  • جاری رکھا عمل درآمد مستقبل کے C++2a معیار کے عناصر۔ مثال کے طور پر، ابتداء کے دوران رینجز کو شامل کرنے کی صلاحیت کو شامل کیا گیا ہے، لیمبڈا ایکسپریشنز کے لیے ایکسٹینشنز کو لاگو کیا گیا ہے، ڈیٹا ڈھانچے کے خالی ممبروں کے لیے سپورٹ اور ممکنہ/غیر امکانی صفات کو شامل کیا گیا ہے، مشروط اظہار میں ورچوئل فنکشنز کو کال کرنے کی صلاحیت فراہم کی گئی ہے۔ وغیرہ
    C++2a سپورٹ کو فعال کرنے کے لیے، "-std=c++2a" اور "-std=gnu++2a" کے اختیارات استعمال کریں۔ بٹ اور ورژن ہیڈر فائلوں کو libstdc++ میں C++2a، std::remove_cvref، std::unwrap_reference، std::unwrap_decay_ref، std::is_nothrow_convertible اور std::type_identity ٹریٹس، std::midpoint، std::ppoint میں شامل کیا گیا۔ , std::bind_front,
    std::visit, std::is_constant_evaluated اور std::assume_aligned، char8_t قسم کے لیے سپورٹ شامل کیا، سٹرنگز کے سابقہ ​​اور لاحقہ کو چیک کرنے کی صلاحیت کو نافذ کیا (starts_with, ends_with)؛

  • نئے ARM پروسیسرز کے لیے تعاون شامل کیا گیا۔
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE اور Neoverse N1۔ پیچیدہ نمبروں کے ساتھ کام کرنے کے لیے Armv8.3-A میں متعارف کرائی گئی ہدایات کے لیے سپورٹ شامل کیا گیا ہے، سیوڈو رینڈم نمبر جنریشن (rng) اور میموری ٹیگنگ (memtag) کے ساتھ ساتھ برانچ پریڈیکشن یونٹ کے قیاس آرائی پر عملدرآمد اور آپریشن سے متعلق حملوں کو روکنے کے لیے ہدایات۔ . AArch64 فن تعمیر کے لیے، ایک پروٹیکشن موڈ شامل کیا گیا ہے۔ ڈھیر اور ڈھیر کے چوراہوں ("-fstack-clash-protection")۔ Armv8.5-A فن تعمیر کی خصوصیات کو استعمال کرنے کے لیے، آپشن "-march=armv8.5-a" شامل کیا گیا ہے۔

  • اس میں GCN مائیکرو آرکیٹیکچر کی بنیاد پر AMD GPUs کے لیے کوڈ بنانے کے لیے بیک اینڈ شامل ہے۔ نفاذ فی الحال سنگل تھریڈڈ ایپلی کیشنز کی تالیف تک محدود ہے (OpenMP اور OpenACC کے ذریعے ملٹی تھریڈڈ کیلکولیشن کرنے کے لیے تعاون بعد میں پیش کیا جائے گا) اور GPU Fiji اور Vega 10 کے لیے سپورٹ؛
  • پروسیسرز کے لیے نیا پسدید شامل کیا گیا۔ اوپن آر آئی ایس سی;
  • پروسیسرز کے لیے بیک اینڈ شامل کیا گیا۔ C-SKY V2, مختلف صارفین کے آلات کے لیے اسی نام کی چینی کمپنی کے ذریعہ تیار کردہ؛
  • تمام کمانڈ لائن آپشنز جو بائٹ ویلیوز کو چلاتے ہیں وہ لاحقہ kb, KiB, MB, MiB, GB اور GiB کو سپورٹ کرتے ہیں۔
  • لاگو کیا "-flive-patching=[inline-only-static|inline-clone]" آپشن آپ کو انٹرپروسیجرل کے استعمال پر ملٹی لیول کنٹرول کی وجہ سے لائیو پیچنگ سسٹمز کے لیے محفوظ تالیف حاصل کرنے کی اجازت دیتا ہے۔IPA) اصلاح
  • bash استعمال کرتے وقت آپشن کی تکمیل کے باریک کنٹرول کے لیے "-completion" آپشن شامل کیا گیا۔
  • تشخیصی ٹولز سورس ٹیکسٹ کے اقتباسات کی نمائش فراہم کرتے ہیں جو لائن نمبر کی نشاندہی کرتے ہیں اور متعلقہ معلومات کو بصری طور پر نشان زد کرتے ہیں، جیسے آپرینڈ کی اقسام۔ لائن نمبرز اور لیبلز کے ڈسپلے کو غیر فعال کرنے کے لیے، "-fno-diagnostics-show-line-numbers" اور "-fno-diagnostics-show-labels" کے اختیارات فراہم کیے گئے ہیں۔

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

  • توسیع شدہ C++ کوڈ میں غلطیوں کی تشخیص کے لیے ٹولز، غلطیوں کی وجوہات کے بارے میں معلومات کی بہتر پڑھنے کی اہلیت اور پریشانی والے پیرامیٹرز کو نمایاں کرنا؛

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

  • شامل کیا گیا آپشن "-fdiagnostics-format=json"، جو مشین پڑھنے کے قابل فارمیٹ (JSON) میں تشخیصی آؤٹ پٹ پیدا کرنے کی اجازت دیتا ہے؛
  • پروسیسنگ کے لیے سورس فائلوں کو منتخب کرنے کے لیے نئے پروفائلنگ کے اختیارات "-fprofile-filter-files" اور "-fprofile-exclude-files" شامل کیے گئے۔
  • ایڈریس سنیٹائزر خودکار متغیرات کے لیے مزید کمپیکٹ تصدیقی کوڈ کی تیاری فراہم کرتا ہے، جو چیک کی جانے والی ایگزیکیوٹیبل فائل کی میموری کی کھپت کو کم کرتا ہے۔
  • "میں بہتر پیداوار-فوپٹ-معلومات» (اضافی اصلاح کے بارے میں تفصیلی معلومات)۔ پہلے سے دستیاب سابقہ ​​"نوٹ" کے علاوہ نئے سابقے "آپٹمائزڈ" اور "مسڈ" شامل کیے گئے۔ ان لائن انفولڈنگ اور سائیکلوں کی ویکٹرائزیشن پر فیصلہ سازی کے بارے میں معلومات کا اضافہ۔
  • "-fsave-optimization-record" کا اختیار شامل کیا گیا، جب وضاحت کی گئی ہو، GCC SRCFILE.opt-record.json.gz فائل کو مخصوص اصلاح کے استعمال پر فیصلوں کی تفصیل کے ساتھ محفوظ کرتا ہے۔ نیا آپشن "-fopt-info" موڈ سے مختلف ہے جس میں اضافی میٹا ڈیٹا، جیسے پروفائل اور ان لائن چینز کے بارے میں معلومات شامل ہیں۔
  • اسٹیک الائنمنٹ کو کنٹرول کرنے کے لیے "-fipa-stack-alignment" اور "-fipa-reference-addressable" کے اختیارات شامل کیے گئے اور انٹر پروسیجرل آپٹیمائزیشن کے دوران جامد متغیرات کے لیے ایڈریسنگ طریقوں (صرف لکھنے یا پڑھنے کے لیے) کا استعمال؛
  • انتساب بائنڈنگ کے ساتھ ساتھ برانچ کی پیشن گوئی اور قیاس آرائی پر مبنی ہدایات پر عمل درآمد سے متعلق رویے کو کنٹرول کرنے کے لیے نئے بلٹ ان فنکشنز متعارف کرائے گئے ہیں:__builtin_has_attribute«،«__builtin_expect_with_probability"اور"__بلٹ_قیاس_محفوظ_قدر" فنکشنز، متغیرات اور اقسام کے لیے ایک نیا وصف شامل کیا گیا ہے۔ کاپی;
  • فورٹران زبان کے لیے غیر مطابقت پذیر ان پٹ/آؤٹ پٹ کے لیے مکمل تعاون نافذ کر دیا گیا ہے۔
  • Solaris 10 (*-*-solaris2.10) اور Cell/BE (سیل براڈ بینڈ انجن SPU) پلیٹ فارمز کے لیے سپورٹ کو فرسودہ کر دیا گیا ہے اور اسے اگلی بڑی ریلیز میں ہٹا دیا جائے گا۔ Armv2, Armv3, Armv5 اور Armv5E آرکیٹیکچرز کے لیے سپورٹ بند کر دی گئی ہے۔ Intel MPX (میموری پروٹیکشن ایکسٹینشنز) کے لیے سپورٹ بند کر دی گئی ہے۔

ماخذ: opennet.ru

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