إطلاق مجموعة المترجمين GCC 9

بعد عام من التطوير نشرت الافراج عن مجموعة مجانية من المترجمين دول مجلس التعاون الخليجي 9.1، الإصدار الرئيسي الأول في فرع دول مجلس التعاون الخليجي 9.x الجديد. وفقا لل مخطط جديد أرقام الإصدار، تم استخدام الإصدار 9.0 في عملية التطوير، وقبل وقت قصير من إصدار مجلس التعاون الخليجي 9.1، كان فرع مجلس التعاون الخليجي 10.0 قد تفرع بالفعل، وعلى أساسه سيتم تشكيل الإصدار المهم التالي، مجلس التعاون الخليجي 10.1.

يتميز الإصدار 9.1 من مجلس التعاون الخليجي بتثبيت الدعم لمعيار C++ 17، والاستمرار في تنفيذ إمكانات معيار C++ 20 المستقبلي (الذي يحمل الاسم الرمزي C++ 2a)، وإدراجه في الواجهة الأمامية للغة D، والدعم الجزئي لـ OpenMP 5.0. ، دعم شبه كامل لـ OpenACC 2.5، وزيادة قابلية التوسع في التحسينات والتحسينات بين الإجراءات في مرحلة الربط، وتوسيع أدوات التشخيص وإضافة تحذيرات جديدة، وواجهات خلفية لـ OpenRISC، وC-SKY V2، وAMD GCN GPU.

رئيسي التغييرات:

  • تمت إضافة دعم للغة البرمجة D. يتضمن مجلس التعاون الخليجي واجهة أمامية مع مترجم GDC (Gnu D Compiler) ومكتبات وقت التشغيل (libphobos)، والتي تسمح لك باستخدام معايير مجلس التعاون الخليجي لبناء برامج بلغة البرمجة D. عملية تمكين دعم لغة D في دول مجلس التعاون الخليجي التي مرة أخرى في عام 2011، ولكن استمرت ونظرًا للحاجة إلى جعل الكود متوافقًا مع متطلبات مجلس التعاون الخليجي ومشاكل نقل حقوق الملكية الفكرية إلى شركة Digital Mars، التي تعمل على تطوير لغة البرمجة ثلاثية الأبعاد؛
  • تم إجراء تحسينات على منشئ التعليمات البرمجية. على سبيل المثال، تم تنفيذ استخدام استراتيجيات مختلفة لتوسيع تعبيرات التبديل (جدول القفز، اختبار البت، شجرة القرار) اعتمادًا على المواقف. تمت إضافة القدرة على تحويل الوظائف الخطية التي تتضمن تعبير Switch باستخدام تحسين "-ftree-switch-conversion" (على سبيل المثال، مجموعة من الشروط مثل "case 2: how = 205;break; case 3: how = 305;break" ;" سيتم تحويله إلى "100 * how + 5";
  • تحسين التحسينات بين الإجراءات. تم تكييف إعدادات النشر المضمنة لقواعد تعليمات برمجية C++ الحديثة وتم توسيعها باستخدام معلمات جديدة max-inline-insns-small وmax-inline-insns-size وuninlined-function-insns وuninlined-function-time وuninlined-thunk-insns وuninlined. -thunk الوقت. تحسين الدقة والعدوانية لفصل الكود البارد/الساخن. تحسين قابلية التوسع للحجم الكبير جدًا وحدات الترجمة (على سبيل المثال، عند تطبيق التحسين في مرحلة الارتباط بالبرامج الكبيرة)؛
  • تم تحسين آلية التحسين بناءً على نتائج ملفات تعريف التعليمات البرمجية (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-parallelism";

    ونتيجة لذلك، بالمقارنة مع إصدار دول مجلس التعاون الخليجي 8.3، فإن التحسينات التي تم إدخالها في إصدار دول مجلس التعاون الخليجي 9 مسموح تقليل وقت التحويل البرمجي لـ Firefox 5 وLibreOffice 66 بحوالي 6.2.3%. انخفض حجم ملفات الكائنات بنسبة 7%. انخفض وقت الربط على وحدة المعالجة المركزية ذات 8 النواة بنسبة 11%. أصبحت الآن مرحلة التحسين التسلسلي لمرحلة الارتباط أسرع بنسبة 28% وتستهلك ذاكرة أقل بنسبة 20%. انخفض استهلاك الذاكرة لكل معالج في المرحلة المتوازية من LTO بنسبة 30%؛

  • يتم تنفيذ معظم مواصفات البرمجة المتوازية للغات C وC++ وFortran اوبن ايه سي سي 2.5، والذي يحدد أدوات تفريغ العمليات على وحدات معالجة الرسومات والمعالجات المتخصصة مثل NVIDIA PTX؛
  • تم تنفيذ الدعم الجزئي للمعيار لـ C وC++ برنامج OpenMP 5.0 (Open Multi-Processing)، والذي يحدد واجهة برمجة التطبيقات (API) وطرق تطبيق أساليب البرمجة المتوازية للغات C وC++ وFortran على الأنظمة متعددة النواة والهجينة (CPU+GPU/DSP) ذات الذاكرة المشتركة ووحدات التوجيه (SIMD). ;
  • تمت إضافة تحذيرات جديدة للغة C: "-Waddress-of-packed- member"(قيمة المؤشر غير المحاذية لعضو محزوم في بنية أو اتحاد) و
    «-قيمة مطلقة" (عند الوصول إلى وظائف لحساب القيمة المطلقة، إذا كانت هناك دالة أكثر ملاءمة للوسيطة المحددة، على سبيل المثال، يجب استخدام fabs(3.14) بدلاً من abs(3.14). تمت إضافة تحذيرات جديدة لـ C++: "-Wdeprecated-copy"،
    "-Winit-list-lifetime"، و"-Wredundant-move"، و"-Wpessimizing-move"، و"-Wclass-conversion". لقد تم توسيع العديد من التحذيرات المتوفرة سابقًا؛

  • تمت إضافة دعم تجريبي لجزء من معيار لغة C المستقبلي، الذي يحمل الاسم الرمزي C2x. لتمكين دعم C2x، استخدم الخيارين "-std=c2x" و"-std=gnu2x" (لتمكين امتدادات GNU). لا يزال المعيار في مرحلة مبكرة من التطوير، وبالتالي، من حيث إمكانياته، يتم دعم التعبير _Static_assert فقط مع وسيطة واحدة (تم توحيد _Static_assert مع وسيطتين في C11)؛
  • تم الإعلان عن استقرار دعم معيار 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::lerp وظائف ، الأمراض المنقولة جنسيا::bind_front،
    std::visit، std::is_constant_evaluated وstd::assume_aligned، أضاف دعمًا لنوع char8_t، ونفذ القدرة على التحقق من بادئة ولاحقة السلاسل (starts_with، end_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”

  • يتضمن واجهة خلفية لإنشاء التعليمات البرمجية لوحدات معالجة الرسوميات AMD استنادًا إلى البنية الدقيقة لـ GCN. يقتصر التنفيذ حاليًا على تجميع التطبيقات ذات الخيوط الواحدة (سيتم تقديم الدعم لتنفيذ العمليات الحسابية متعددة الخيوط عبر OpenMP وOpenACC لاحقًا) ودعم GPU Fiji وVega 10؛
  • تمت إضافة خلفية جديدة للمعالجات أوبنريسك;
  • تمت إضافة الواجهة الخلفية للمعالجات سي-سكاي V2، من إنتاج الشركة الصينية التي تحمل الاسم نفسه لمختلف الأجهزة الاستهلاكية؛
  • جميع خيارات سطر الأوامر التي تعمل بقيم البايت تدعم اللواحق kb وKiB وMB وMiB وGB وGiB؛
  • مُنفّذ يتيح لك الخيار "-flive-patching=[inline-only-static|inline-clone]" تحقيق تجميع آمن لأنظمة التصحيح المباشر بسبب التحكم متعدد المستويات في استخدام الإجراءات البينية (IPA) التحسينات؛
  • تمت إضافة خيار "--completion" للتحكم الدقيق في إكمال الخيار عند استخدام bash؛
  • توفر أدوات التشخيص عروضًا لمقتطفات النص المصدر تشير إلى رقم السطر ووضع علامات مرئية على المعلومات ذات الصلة، مثل أنواع المعاملات. لتعطيل عرض أرقام الأسطر والتسميات، يتم توفير الخيارين "-fno-diagnostics-show-line-numbers" و"-fno-diagnostics-show-labels"؛

    إطلاق مجموعة المترجمين GCC 9

  • موسع أدوات لتشخيص الأخطاء في كود C++، وتحسين إمكانية قراءة المعلومات حول أسباب الأخطاء وتسليط الضوء على المعلمات الإشكالية؛

    إطلاق مجموعة المترجمين GCC 9

  • تمت إضافة الخيار "-fdiagnostics-format=json"، والذي يسمح بإنشاء مخرجات تشخيصية بتنسيق يمكن قراءته آليًا (JSON)؛
  • تمت إضافة خيارات ملفات تعريف جديدة "-fprofile-filter-files" و"-fprofile-exclude-files" لتحديد الملفات المصدر المراد معالجتها؛
  • يوفر AddressSanitizer إنشاء رمز تحقق أكثر إحكاما للمتغيرات التلقائية، مما يقلل من استهلاك الذاكرة للملف القابل للتنفيذ الذي يتم فحصه؛
  • تحسين الإخراج في "-fopt- معلومات» (معلومات تفصيلية حول التحسينات المضافة). تمت إضافة بادئات جديدة "الأمثل" و"المفقود"، بالإضافة إلى البادئة المتوفرة سابقًا "ملاحظة". إضافة ناتج من المعلومات حول عملية صنع القرار بشأن الكشف المضمن وتوجيه الدورات؛
  • تمت إضافة خيار "-fsave-optimization-record"، عند تحديده، يحفظ مجلس التعاون الخليجي ملف SRCFILE.opt-record.json.gz مع وصف للقرارات المتعلقة باستخدام تحسينات معينة. ويختلف الخيار الجديد عن وضع "-fopt-info" من خلال تضمين بيانات تعريف إضافية، مثل معلومات حول الملف الشخصي والسلاسل المضمّنة؛
  • تمت إضافة خيارات "-fipa-stack-alignment" و"-fipa-reference-addressable" للتحكم في محاذاة المكدس واستخدام أوضاع العنونة (للكتابة فقط أو للقراءة الدقيقة) للمتغيرات الثابتة أثناء التحسينات بين الإجراءات؛
  • تم تقديم وظائف مدمجة جديدة للتحكم في ربط السمات بالإضافة إلى السلوك المتعلق بالتنبؤ بالفرع وتنفيذ تعليمات المضاربة: "__builtin_has_attribute"__builtin_expect_with_probability" و "__builtin_speculation_safe_value". تمت إضافة سمة جديدة للوظائف والمتغيرات والأنواع نسخة;
  • تم تقديم الدعم الكامل للإدخال/الإخراج غير المتزامن للغة فورتران؛
  • تم إهمال دعم الأنظمة الأساسية Solaris 10 (*-*-solaris2.10) وCell/BE (Cell Broadband Engine SPU) وستتم إزالته في الإصدار الرئيسي التالي. تم إيقاف دعم هياكل Armv2 وArmv3 وArmv5 وArmv5E. تم إيقاف دعم Intel MPX (امتدادات حماية الذاكرة).

المصدر: opennet.ru

إضافة تعليق