انتشار مجموعه کامپایلر GCC 13

پس از یک سال توسعه، مجموعه کامپایلر رایگان GCC 13.1 منتشر شد که اولین نسخه قابل توجه در شاخه جدید GCC 13.x است. مطابق با طرح شماره گذاری نسخه جدید، نسخه 13.0 در فرآیند توسعه استفاده شد و کمی قبل از انتشار GCC 13.1، شعبه GCC 14.0 قبلاً منشعب شده بود که نسخه اصلی بعدی GCC 14.1 از آن تشکیل می شد.

تغییرات اصلی:

  • GCC شامل یک فرانت اند برای مونتاژ برنامه ها در زبان برنامه نویسی Modula-2 است. مونتاژ کد مربوط به لهجه های PIM2، PIM3 و PIM4 و همچنین استاندارد ISO پذیرفته شده برای یک زبان خاص، پشتیبانی می شود.
  • یک نمای ظاهری با اجرای کامپایلر زبان Rust که توسط پروژه gccrs (GCC Rust) تهیه شده است به درخت منبع GCC اضافه شده است. در شکل کنونی آن، انتهای رو به جلو به عنوان آزمایشی علامت گذاری شده و به طور پیش فرض غیرفعال است. هنگامی که فرانت اند آماده شد (منتظر می شود در نسخه بعدی)، ابزار استاندارد GCC را می توان برای کامپایل برنامه ها به زبان Rust بدون نیاز به نصب کامپایلر rustc، که با استفاده از توسعه های LLVM ساخته شده است، استفاده کرد.
  • موتور Link Time Optimization (LTO) برای بهینه‌سازی اجرای ساخت‌های موازی در چندین رشته، پشتیبانی از jobserver را که توسط پروژه ساخت گنو پشتیبانی می‌شود، اضافه کرده است. در GCC، jobserver برای موازی کردن کار در طول بهینه سازی LTO در زمینه کل برنامه (WPA، تحلیل کل برنامه) استفاده می شود. برای تعامل با jobserver، لوله های نامگذاری شده به طور پیش فرض استفاده می شوند (-jobserver-style=fifo).
  • آنالایزر استاتیک (-fanalyzer) 20 بررسی تشخیصی جدید ارائه می دهد، از جمله "-Wanalyzer-out-of-bounds"، "-Wanalyzer-allocation-size"، "-Wanalyzer-deref-pre-check"، "-Wanalyzer- infinite" -recursion" -Wanalyzer-jump-through-null"، "-Wanalyzer-va-list-leak".
  • قابلیت خروجی عیب یابی با فرمت SARIF بر اساس JSON پیاده سازی شده است. فرمت جدید را می توان برای به دست آوردن نتایج تجزیه و تحلیل استاتیک (GCC -fanalyzer) و همچنین برای به دست آوردن اطلاعات هشدار و خطا استفاده کرد. فعال کردن با گزینه "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file" انجام می شود، که در آن گزینه های دارای "json" در یک نوع خاص GCC از فرمت JSON خروجی ایجاد می کنند. .
  • برخی از ویژگی های تعریف شده در استاندارد C23 C مانند ثابت nullptr برای تعریف نشانگرهای تهی، ساده کردن استفاده از لیست های متغیر، گسترش قابلیت های شمارش ها، ویژگی noreturn، امکان استفاده از constexpr و auto در هنگام تعریف اشیاء، نوع و typeof_unqual، کلیدواژه‌های جدید alignas، alignof، bool، false، static_assert، thread_local و true، اجازه می‌دهند پرانتزهای خالی در حین مقداردهی اولیه مشخص شوند.
  • برخی از ویژگی‌های تعریف شده در استاندارد C++23 را پیاده‌سازی کرد، مانند امکان قرار دادن علامت‌ها در انتهای عبارات ترکیبی، سازگاری با نوع char8_t، دستورالعمل پیش‌پردازنده #warning، محدود شده (\u{}، \o{}، \x{}) و با نام ('\N{LATIN CAPITAL LETTER A}') دنباله‌های فرار، عملگر استاتیک()، عملگر استاتیک[]، عملگر برابری درون عبارات، حذف برخی محدودیت‌ها در استفاده از constexpr، پشتیبانی از UTF -8 در متون منبع.
  • libstdc++ پشتیبانی آزمایشی برای استانداردهای C++20 و C++23 را بهبود بخشیده است، به عنوان مثال، پشتیبانی از فایل هدر را اضافه کرده است. و std::format، قابلیت های فایل هدر گسترش یافته است ، انواع ممیز شناور اضافی اضافه شد، فایل های هدر پیاده سازی شدند و .
  • ویژگی‌های تابع جدید به سندی اضافه شد که توصیف‌گر فایل در یک متغیر صحیح ارسال می‌شود: "__خصیصه__((fd_arg(N)))"، "__خصیصه__((fd_arg_read(N)))" و "__attribute__((fd_arg_write(N)) )" ویژگی های مشخص شده را می توان در یک تحلیلگر استاتیک (-fanalyzer) برای تشخیص عملکرد نادرست با توصیفگرهای فایل استفاده کرد.
  • یک ویژگی جدید "__attribute__((assume(EXPR)))" اضافه شد که با آن می توانید به کامپایلر بگویید که عبارت درست است و کامپایلر می تواند از این واقعیت بدون ارزیابی عبارت استفاده کند.
  • پرچم "-fstrict-flex-arrays=[level]" برای انتخاب رفتار هنگام مدیریت عناصر آرایه انعطاف پذیر در ساختارها اضافه شد (اعضای آرایه انعطاف پذیر، آرایه ای با اندازه نامحدود در انتهای یک ساختار، به عنوان مثال، "int b[]" ).
  • پرچم "-Wenum-int-mismatch" اضافه شد تا در صورت عدم تطابق بین نوع enum و نوع عدد صحیح هشدار دهد.
  • فرانت‌اند برای زبان فرترن به‌طور کامل از نهایی‌سازی پشتیبانی می‌کند.
  • در قسمت جلویی برای زبان Go، پشتیبانی از توابع و انواع عمومی (عمومی) اضافه شده است و سازگاری با بسته های زبان Go 1.18 تضمین شده است.
  • پشتیبان معماری AArch64 از CPU Ampere-1A (ampere1a)، Arm Cortex-A715 (cortex-a715)، Arm Cortex-X1C (cortex-x1c)، Arm Cortex-X3 (cortex-x3) و Arm Neoverse V2 (neoverse) پشتیبانی می کند. -v2). پشتیبانی از آرگومان های "armv9.1-a"، "armv9.2-a" و "armv9.3-a" به گزینه "-march=" اضافه شد. پشتیبانی از پسوندهای پردازنده FEAT_LRCPC، FEAT_CSSC و FEAT_LSE2 اضافه شده است.
  • پشتیبانی از CPU STAR-MC1 (star-mc1)، Arm Cortex-X1C (cortex-x1c) و Arm Cortex-M85 (cortex-m85) به باطن برای معماری ARM اضافه شده است.
  • باطن معماری x86 از پردازنده‌های Intel Raptor Lake، Meteor Lake، Sierra Forest، Grand Ridge، Emerald Rapids، Granite Rapids و همچنین پردازنده‌های AMD Zen 4 (znver4) پشتیبانی می‌کند. پسوندهای معماری مجموعه دستورالعمل AVX-IFMA، AVX-VNNI-INT8، AVX-NE-CONVERT، CMPccXADD، AMX-FP16، PREFETCHI، RAO-INT و AMX-COMPLEX که در پردازنده های اینتل پیشنهاد شده اند، پیاده سازی شده اند. برای زبان های C و C++ در سیستم های SSE2، نوع __bf16 ارائه شده است.
  • پشتیبان تولید کد برای پردازنده‌های گرافیکی Radeon AMD (GCN) شامل توانایی استفاده از شتاب‌دهنده‌های AMD Instinct MI200 برای بهبود عملکرد OpenMP/OpenACC است. بهبود برداری با استفاده از دستورالعمل های SIMD.
  • قابلیت های Backend برای پلتفرم LoongArch به طور قابل توجهی گسترش یافته است.
  • در باطن معماری RISC-V، پشتیبانی از CPU XuanTie C906 (thead-c906) T-Head اضافه شده است. پشتیبانی از پردازنده های برداری تعریف شده در مشخصات RISC-V Vector Extension Intrinsic 0.11 اجرا شده است. پشتیبانی از 30 افزونه به مشخصات RISC-V اضافه شده است.
  • اگر بهینه‌سازی‌های -Ofast، -fast-math یا -funsafe-math فعال باشند، تولید اشیاء مشترک با گزینه -shared، پس از افزودن یک محیط ممیز شناور، اضافه کردن کد راه‌اندازی را متوقف می‌کند.
  • پشتیبانی از فرمت اشکال زدایی DWARF تقریباً در همه پیکربندی ها اجرا می شود.
  • گزینه "-gz=zstd" برای فشرده سازی اطلاعات اشکال زدایی با استفاده از الگوریتم Zstandard اضافه شد. پشتیبانی از حالت فشرده سازی اشکال زدایی قدیمی "-gz=zlib-gnu" متوقف شده است.
  • اضافه شدن پشتیبانی اولیه برای OpenMP 5.2 (Open Multi-Processing) و ادامه اجرای استانداردهای OpenMP 5.0 و 5.1 که APIها و روش هایی را برای اعمال روش های برنامه نویسی موازی در سیستم های چند هسته ای و ترکیبی (CPU+GPU/DSP) با حافظه مشترک تعریف می کند. و واحدهای برداری (SIMD).
  • پشتیبانی از فرمت ذخیره سازی اطلاعات اشکال زدایی قدیمی "STABS" (فعال شده با گزینه های -gstabs و -gxcoff) که در دهه 1980 ایجاد شد و در دیباگر dbx استفاده می شد، متوقف شده است.
  • پشتیبانی از Solaris 11.3 منسوخ شده است (کد پشتیبانی از این پلتفرم در نسخه بعدی حذف خواهد شد).

منبع: opennet.ru

اضافه کردن نظر