GCC 13 kompilyatorlar to'plamining chiqarilishi

Bir yillik rivojlanishdan so'ng, bepul GCC 13.1 kompilyatorlar to'plami chiqarildi, bu yangi GCC 13.x filialidagi birinchi muhim nashr. Yangi nashrlarni raqamlash sxemasiga ko'ra, ishlab chiqish jarayonida 13.0 versiyasi ishlatilgan va GCC 13.1 chiqarilishidan biroz oldin GCC 14.0 filiali allaqachon ajratilgan bo'lib, undan GCC 14.1 ning keyingi muhim relizi hosil bo'ladi.

Asosiy o'zgarishlar:

  • GCC Modula-2 dasturlash tilida dasturlarni yaratish uchun frontendni qabul qildi. U PIM2, PIM3 va PIM4 dialektlariga mos keladigan qurilish kodini hamda ushbu til uchun qabul qilingan ISO standartini qo‘llab-quvvatlaydi.
  • GCC manba daraxtiga gccrs loyihasi (GCC Rust) tomonidan tayyorlangan Rust tili kompilyatorini amalga oshirishga mo'ljallangan frontend qo'shildi. Joriy ko'rinishda forntend eksperimental sifatida belgilangan va sukut bo'yicha o'chirilgan. Frontend tayyor bo'lgach (keyingi versiyada kutilmoqda), standart GCC asboblar to'plami LLVM ishlanmalari yordamida qurilgan rustc kompilyatorini o'rnatmasdan Rust dasturlarini kompilyatsiya qilish uchun ishlatilishi mumkin.
  • Bosqichli optimallashtirish (LTO) bir nechta iplar bo'ylab parallel qurishni optimallashtirish uchun GNU make loyihasi tomonidan qo'llab-quvvatlanadigan ish serverini (ish serveri) qo'llab-quvvatlaydi. GCCda ish serveri butun dastur kontekstida LTO optimallashtirish vaqtida ishni parallellashtirish uchun ishlatiladi (WPA, Butun dastur tahlili). Nomlangan quvurlar (--jobserver-style=fifo) sukut bo'yicha ish serveri bilan ishlash uchun ishlatiladi.
  • Statik analizator (-fanalyzer) 20 ta yangi diagnostika tekshiruvlarini taklif etadi, jumladan "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-befor-check", "-Wanalyzer- infinite" -rekursiya" -Wanalyzer-o'tish-null", "-Wanalyzer-va-list-leak".
  • JSON asosidagi diagnostikani SARIF formatida chiqarish imkoniyati joriy etildi. Yangi format statik tahlil natijalarini (GCC -fanalyzer) olish, shuningdek, ogohlantirishlar va xatolar haqida ma'lumot olish uchun ishlatilishi mumkin. Yoqish "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file" opsiyasi bilan amalga oshiriladi, bunda "json" parametrlari JSON formatining GCCga xos variantida chiqadi. .
  • C23 C standartida belgilangan ba'zi xususiyatlar amalga oshirildi, masalan, null ko'rsatkichlarni aniqlash uchun nullptr doimiysi, o'zgaruvchan sonli argumentlar (variadic) bilan ro'yxatlardan foydalanishni osonlashtiradi, enumlarning imkoniyatlarini kengaytiradi, noreturn atributidan foydalanishga ruxsat beradi. ob'ektlarni belgilashda constexpr va auto, typeof va typeof_unqual, yangi kalit so'zlar alignas, alignof, bool, false, static_assert, thread_local va true, ishga tushirishda bo'sh qavslarga ruxsat beradi.
  • C++ 23 standartida belgilangan baʼzi xususiyatlarni amalga oshirdi, masalan, qoʻshma iboralar oxiriga belgilar qoʻyish imkoniyati, char8_t turiga moslik, (\u{}, \o{} bilan chegaralangan #warning preprocessor direktivasi. , \x{}) va nomli ('\N{LOTIN KAPITAL A}') qochish ketma-ketligi, statik operator(), statik operator[], ifodalar ichidagi tenglik operatori, constexpr dan foydalanishdagi baʼzi cheklovlardan tashqari, qoʻllab-quvvatlash manba matnlarida UTF-8 uchun.
  • libstdc++ C++20 va C++23 standartlari uchun eksperimental qo‘llab-quvvatlashni yaxshiladi, masalan, sarlavha faylini qo‘llab-quvvatlash. va std::format, kengaytirilgan sarlavha fayli imkoniyatlari , qo'shimcha suzuvchi nuqta turlari qo'shildi, sarlavha fayllari amalga oshirildi Va .
  • Fayl identifikatori butun oʻzgaruvchiga uzatilganligi haqidagi hujjatga yangi funksiya atributlari qoʻshildi: "__attribute__((fd_arg(N)))), "__attribute__((fd_arg_read(N)))", va "__attribute__((fd_arg_write(N)) )) ". Belgilangan atributlar statik analizatorda (-fanalyzer) fayl deskriptorlari bilan noto'g'ri ishlashni aniqlash uchun ishlatilishi mumkin.
  • Yangi "__attribute__((assume(EXPR)))" atributi qo'shildi, uning yordamida siz kompilyatorga ifodaning to'g'riligini aytishingiz mumkin va kompilyator bu faktdan ifodani baholamasdan foydalanishi mumkin.
  • Strukturalarda moslashuvchan massiv elementini qayta ishlashda xatti-harakatni tanlash uchun "-fstrict-flex-arrays=[level]" bayrog'i qo'shildi (Moslashuvchan massiv a'zolari, strukturaning oxiridagi noaniq o'lchamdagi massiv, masalan, "int b[] ").
  • Agar sanab o'tilgan va butun son turi o'rtasida nomuvofiqlik bo'lsa, ogohlantirish uchun "-Wenum-int-mismatch" belgisi qo'shildi.
  • Fortran front-end yakuniylashtirishni to'liq qo'llab-quvvatlaydi.
  • Go tilining old qismiga umumiy funktsiyalar va turlarni (generiklar) qo'llab-quvvatlash qo'shildi va Go 1.18 tili uchun paketlar bilan muvofiqligi ta'minlandi.
  • AArch64 protsessorlari Amper-1A (ampere1a), Arm Cortex-A715 (korteks-a715), Arm Cortex-X1C (korteks-x1c), Arm Cortex-X3 (korteks-x3) va Arm Neoverse V2 (neoverse -v2) protsessorlarini qo'llab-quvvatlaydi. . "-march=" variantiga "armv9.1-a", "armv9.2-a" va "armv9.3-a" argumentlarini qo'llab-quvvatlash qo'shildi. FEAT_LRCPC, FEAT_CSSC va FEAT_LSE2 protsessor kengaytmalarini qo‘llab-quvvatlash qo‘shildi.
  • STAR-MC1 (star-mc1), Arm Cortex-X1C (korteks-x1c) va Arm Cortex-M85 (korteks-m85) protsessorlarini qo'llab-quvvatlash ARM arxitekturasining orqa qismiga qo'shildi.
  • Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids va AMD Zen 86 (znver4) protsessorlarini qo'llab-quvvatlash x4 backendiga qo'shildi. Intel protsessorlarida tavsiya etilgan AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT va AMX-COMPLEX ko'rsatmalar to'plami arxitektura kengaytmalari amalga oshirildi. SSE2 bo'lgan tizimlarda C va C++ uchun __bf16 turi taqdim etiladi.
  • AMD Radeon GPU (GCN) uchun kod yaratish backend OpenMP/OpenACC ish faoliyatini yaxshilash uchun AMD Instinct MI200 tezlatkichlaridan foydalanish imkoniyatini amalga oshiradi. SIMD ko'rsatmalaridan foydalangan holda yaxshilangan vektorizatsiya.
  • LoongArch platformasi uchun backend imkoniyatlari sezilarli darajada kengaytirildi.
  • RISC-V orqa tomonida CPU T-Head-ning XuanTie C906 (thead-c906) uchun qo'shimcha qo'llab-quvvatlash. RISC-V vektor kengaytmasining Intrinsic 0.11 spetsifikatsiyasida belgilangan vektor ishlov beruvchilari uchun qo'llab-quvvatlandi. 30 ta RISC-V spetsifikatsiyasi kengaytmalari uchun qo‘shimcha qo‘llab-quvvatlash.
  • "-shared" opsiyasi bilan umumiy ob'ektlarni yaratishda "-Ofast", "-ffast-math" yoki "-funsafe-math-optimizations" optimallashtirishlari yoqilgan bo'lsa, suzuvchi nuqta muhiti qo'shilgandan keyin ishga tushirish kodi endi qo'shilmaydi. .
  • DWARF disk raskadrovka formatini qo'llab-quvvatlash deyarli barcha konfiguratsiyalarda amalga oshiriladi.
  • Zstandard algoritmi yordamida disk raskadrovka ma'lumotlarini siqish uchun "-gz=zstd" opsiyasi qo'shildi. "-gz=zlib-gnu" eskirgan disk raskadrovka ma'lumotlarini siqish rejimini qo'llab-quvvatlash olib tashlandi.
  • OpenMP 5.2 (Open Multi-Processing) uchun dastlabki yordam qo'shildi va OpenMP 5.0 va 5.1 standartlarini joriy etish davom ettirildi, API va ko'p yadroli va gibrid (CPU + GPU / DSP) tizimlarda parallel dasturlash usullarini qo'llash usullarini belgilab berdi. umumiy xotira va vektorlashtirish birliklari (SIMD).
  • 1980-yillarda yaratilgan va dbx disk raskadrovka dasturida foydalanilgan eski STABS disk raskadrovka maʼlumotlarini saqlash formati (-gstabs va -gxcoff opsiyalari bilan faollashtirilgan) uchun eskirgan qoʻllab-quvvatlash.
  • Solaris 11.3 uchun eskirgan qo‘llab-quvvatlash (ushbu platformani qo‘llab-quvvatlash uchun kod kelgusi versiyada olib tashlanadi).

Manba: opennet.ru

a Izoh qo'shish