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

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

يتميز الإصدار 10.1 من مجلس التعاون الخليجي بتنفيذ العديد من الابتكارات في لغة C++ التي تم تطويرها لمعيار C++20، والتحسينات المتعلقة بمعيار لغة C المستقبلي (C2x)، والتحسينات الجديدة في الواجهات الخلفية للمترجم والدعم التجريبي. وضع التحليل الثابت. بالإضافة إلى ذلك، أثناء إعداد فرع جديد، قام المشروع بنقل المستودع من SVN إلى Git.

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

  • وأضاف الوضع التجريبي للتحليل الساكن "-محلل"، الذي يقوم بإجراء تحليل بين الإجراءات كثيف الاستخدام للموارد لمسارات تنفيذ التعليمات البرمجية وتدفقات البيانات في البرنامج. الوضع قادر على اكتشاف المشكلات في مرحلة الترجمة، مثل الاستدعاءات المزدوجة للوظيفة free() لمنطقة ذاكرة واحدة، وتسريبات واصف الملف، وإلغاء المرجع وتمرير المؤشرات الفارغة، والوصول إلى كتل الذاكرة المحررة، واستخدام القيم غير المهيأة، وما إلى ذلك. إن استخدام الوضع الجديد لرمز OpenSSL قد جعل من الممكن التعرف عليه بالفعل الضعف الخطير.
  • تحسين التحسينات بين الإجراءات. تمت إعادة تصميم ممر IPA-SRA (الاستبدال العددي المشترك بين الإجراءات) للعمل في وقت الربط، ومن بين أمور أخرى، يزيل الآن القيم المحسوبة والمرتجعة غير المستخدمة. في وضع التحسين "-O2"، يتم تمكين خيار "-finline-functions"، والذي يتم إعادة ضبطه لتفضيل تعليمات برمجية أكثر إحكاما على أداء التنفيذ. لقد تم تسريع عمل الاستدلال لنشر الوظائف المضمنة. يمكن الآن للاستدلالات المضمنة للتوسع والاستنساخ الوظيفي استخدام معلومات حول نطاقات القيمة للتنبؤ بفعالية التحولات الفردية. بالنسبة لـ C++، تم تحسين دقة تحليل الاسم المستعار على أساس النوع.
  • تحسينات وقت الارتباط المحسنة (LTO). تمت إضافة ملف تنفيذي جديد lto-dump لإعادة تعيين المعلومات حول ملفات الكائنات باستخدام الرمز الثانوي LTO. تحدد عمليات LTO المتوازية تلقائيًا عدد مهام التنفيذ التي يتم تشغيلها في نفس الوقت، وإذا لم يكن من الممكن تحديدها، استخدم المعلومات حول عدد نوى وحدة المعالجة المركزية كعامل موازنة. تمت إضافة القدرة على ضغط الرمز الثانوي LTO باستخدام خوارزمية zstd.
  • تم تحسين آلية التحسين بناءً على نتائج ملفات تعريف التعليمات البرمجية (PGO - التحسين الموجه بالملف الشخصي)، مما يؤدي إلى إنشاء تعليمات برمجية أكثر مثالية بناءً على تحليل خصائص تنفيذ التعليمات البرمجية. تحسين صيانة الملف الشخصي أثناء التجميع وفصل التعليمات البرمجية الساخنة/الباردة. عبر الخيار "-fprofile- القيم» يمكن الآن مراقبة ما يصل إلى 4 قيم للملف الشخصي، على سبيل المثال للمكالمات غير المباشرة وتوفير معلومات أكثر دقة للملف الشخصي.
  • تم تنفيذ مواصفات البرمجة المتوازية للغات C وC++ وFortran اوبن ايه سي سي 2.6، والذي يحدد أدوات تفريغ العمليات على وحدات معالجة الرسومات والمعالجات المتخصصة مثل NVIDIA PTX. لقد اكتمل تنفيذ المعيار تقريبًا برنامج OpenMP 5.0 (Open Multi-Processing)، والذي يحدد واجهة برمجة التطبيقات (API) وطرق تطبيق أساليب البرمجة المتوازية على الأنظمة متعددة النواة والهجينة (CPU+GPU/DSP) ذات الذاكرة المشتركة ووحدات التوجيه (SIMD). تمت إضافة ميزات مثل الشروط الشرطية الأخيرة الخاصة، وتوجيهات المسح والحلقة، وتعبيرات الطلب واستخدام_device_addr. بالنسبة إلى OpenMP وOpenACC، تمت إضافة الدعم لعمليات التفريغ على وحدات معالجة الرسومات من الجيل الرابع (فيجي) والجيل الخامس من AMD Radeon (GCN) (VEGA 10/VEGA 20).
  • بالنسبة للغات عائلة C، تمت إضافة وظيفة "الوصول" لوصف وصول الوظيفة إلى الكائنات التي يتم تمريرها عن طريق مرجع أو مؤشر، ولربط هذه الكائنات بوسائط عددية تحتوي على معلومات حول حجم الكائنات. للعمل جنبًا إلى جنب مع "الوصول"، يتم تطبيق سمة "النوع" لاكتشاف الوصول غير الصحيح من وظائف المستخدم، على سبيل المثال، عند كتابة القيم إلى منطقة خارج حدود المصفوفة. تمت إضافة أيضًا سمة "symver" لربط الرموز في ملف ELF بأرقام إصدارات محددة.
  • تمت إضافة تحذيرات جديدة:
    • "-Wstring-compare" (ممكّن باستخدام "-Wextra") - يحذر من وجود تعبيرات تتم فيها مقارنة الصفر بنتيجة استدعاء الدالتين strcmp وstrncmp، وهو ما يعادل ثابتًا نظرًا لحقيقة أن الطول إحدى الوسيطتين أكبر من حجم المصفوفة في الوسيطة الثانية.
    • "-Wzero-length-bounds" (ممكّن باستخدام "-Warray-bounds") - يحذر من الوصول إلى عناصر المصفوفة ذات الطول الصفري، مما قد يؤدي إلى الكتابة فوق بيانات أخرى.
    • تم توسيع التحذيرات "-Warray-bounds" و"-Wformat-overflow" و"-Wrestrict" و"-Wreturn-local-addr" و"-Wstringop-overflow" لتوسيع عدد المواقف خارج الحدود التي يتم التعامل معها.
  • تم تنفيذ القدرة على تحديد أحرف واسعة مباشرة في المعرفات باستخدام الترميز الحالي (UTF-8 افتراضيًا) بدلاً من تدوين UCN (\uNNNN أو \UNNNNNNNNN). على سبيل المثال:

    ثابت ثابت int π = 3;
    كثافة العمليات get_naïve_pi() {
    العودة π؛
    }

  • بالنسبة للغة C، تم تنفيذ جزء من الميزات الجديدة التي تم تطويرها ضمن معيار C2X (تم تمكينها عن طريق تحديد -std=c2x و -std=gnu2x): ظهر دعم بناء الجملة "[[]]" لتحديد السمات كما في C++ (على سبيل المثال، [[gnu ::const]]، [[مهمل]]، [[fallthrough]] و [[maybe_unused]]. تمت إضافة دعم لبناء الجملة "u8" لتعريف الثوابت بأحرف UTF-8.
    تمت إضافة وحدات ماكرو جديدة إلى . تمت إضافة بدائل "%OB" و"%Ob" إلى strftime.

  • بشكل افتراضي، تستخدم لغة C الوضع "-fno-common"، الذي يسمح بوصول أكثر كفاءة إلى المتغيرات العامة على بعض الأنظمة الأساسية.
  • بالنسبة لـ C++، تم تنفيذ حوالي 16 تغييرًا وابتكارًا، تم تطويرها في معيار C++20. بما في ذلك الكلمة الأساسية المضافة "constinit"
    وتم تنفيذ دعم ملحقات القالب "المفهوم". تتيح لك المفاهيم تحديد مجموعة من متطلبات معلمات القالب التي، في وقت الترجمة، تحد من مجموعة الوسائط التي يمكن قبولها كمعلمات قالب. يمكن استخدام المفاهيم لتجنب التناقضات المنطقية بين خصائص أنواع البيانات المستخدمة داخل القالب وخصائص نوع البيانات لمعلمات الإدخال.

  • يوفر G++ الكشف عن السلوك غير المحدد الناتج عن تغيير الكائنات الثابتة من خلال constexpr. تم تقليل استهلاك الذاكرة بواسطة المترجم عند حساب constexpr. تمت إضافة تحذيرات جديدة "-Wmismatched-tags" و"-Wredundant-tags".
  • تم اقتراح خيارات سطر الأوامر الجديدة:
    • "-fallocation-dce" لإزالة الأزواج غير الضرورية من عوامل التشغيل "الجديدة" و"الحذف".
    • "-fprofile-partial-training" لتعطيل تحسين الحجم للتعليمات البرمجية التي لا تحتوي على تدريب.
    • "-fprofile-reproducible للتحكم في مستوى استنساخ الملف الشخصي.
    • "-fprofile-prefix-path" لتحديد دليل بناء المصدر الأساسي المستخدم لإنشاء ملف تعريف منفصل (لـ "-fprofile-generate=profile_dir" و"-fprofile-use=profile_dir").
  • في نص التحذير الخاص بالخيارات المذكورة، يتم توفير الارتباطات التشعبية التي تسمح لك بالانتقال إلى الوثائق الخاصة بهذه الخيارات. يتم التحكم في استبدال عنوان URL باستخدام خيار "-fdiagnostics-urls".
  • تمت إضافة مشغل المعالج المسبق "__has_builtin"، والتي يمكن استخدامها للتحقق من الوظائف المضمنة.
  • تمت إضافة وظيفة مدمجة جديدة "__builtin_roundeven" مع تنفيذ وظيفة التقريب المحددة في مواصفات ISO/IEC TS 18661، على غرار "الجولة"، ولكن تقريب الجزء أكبر من 0.5 لأعلى (إلى قيمة أكبر)، وأقل من 0.5 - نزولاً (إلى الصفر)، ويساوي 0.5 - بدءاً من تكافؤ الرقم قبل الأخير.
  • بالنسبة لبنية AArch64، تمت إضافة دعم لامتداد SVE2 وتم تحسين دعم SVE (امتداد ناقل قابل للتوسيع)، بما في ذلك الدعم الإضافي لوظائف وأنواع SVE ACLE المضمنة، واستخدام التوجيه. تم توسيع دعم LSE (امتدادات النظام الكبيرة) وTME (امتداد ذاكرة المعاملات). تمت إضافة تعليمات جديدة مقترحة في Armv8.5-A وArmv8.6-A، بما في ذلك تعليمات لإنشاء أرقام عشوائية، والتقريب، وربط علامة الذاكرة،
    bfloat16 وضرب المصفوفة. تمت إضافة دعم المعالج
    ذراع كورتيكس-A77,
    ذراع كورتيكس-A76AE،
    ذراع كورتيكس-A65,
    ذراع كورتيكس-A65AE،
    الذراع Cortex-A34 و
    مارفيل ثاندر اكس 3.

  • تمت إضافة دعم لـ ABI FDPIC (مؤشرات دالة 32 بت) لـ ARM64. إعادة تصميم وتحسين المعالجة لعمليات الأعداد الصحيحة 64 بت. تمت إضافة دعم وحدة المعالجة المركزية
    ذراع كورتيكس-A77,
    ذراع Cortex-A76AE و
    ذراع Cortex-M35P. دعم موسع لتعليمات معالجة بيانات ACLE، بما في ذلك SIMD 32 بت، والضرب 16 بت، وحساب المزلاج، وتحسينات خوارزمية DSP الأخرى. تمت إضافة دعم تجريبي لتعليمات ACLE CDE (ملحق مسار البيانات المخصص).

  • تم تحسين إنشاء التعليمات البرمجية وتوجيهها بشكل ملحوظ في الواجهة الخلفية لوحدات معالجة الرسومات AMD استنادًا إلى البنية الدقيقة لـ GCN.
  • تمت إضافة دعم للأجهزة المشابهة لـ XMEGA لهندسة AVR
    ATtiny202، ATtiny204، ATtiny402، ATtiny404، ATtiny406، ATtiny804، ATtiny806، ATtiny807، ATtiny1604، ATtiny1606، ATtiny1607، ATmega808، ATmega809، ATmega1608، ATmega1609 3208، ATmega3209، ATmega4808 4809، ATmegaXNUMX وATmegaXNUMX.

  • تمت إضافة ملحق بنية مجموعة تعليمات Intel ENQCMD الجديد (-menqcmd) لبنيات IA-32/x86-64. تمت إضافة دعم لوحدات المعالجة المركزية Intel Cooperlake (-march=cooperlake، ويتضمن ملحق AVX512BF16 ISA) وTigerlake (-march=tigerlake، ويتضمن ملحقات MOVDIRI وMOVDIR64B وAVX512VP2INTERSECT ISA).
  • لقد تم إهمال تطبيق HSAIL (اللغة الوسيطة لهندسة النظام غير المتجانسة) لأنظمة الحوسبة غير المتجانسة المستندة إلى بنية HSA ومن المحتمل أن تتم إزالته في إصدار مستقبلي.

المصدر: opennet.ru

إضافة تعليق