GCC 13 kompilyator dəstinin buraxılışı

Bir illik inkişafdan sonra pulsuz GCC 13.1 kompilyator dəstinin buraxılışı, yeni GCC 13.x filialında ilk əhəmiyyətli buraxılış buraxıldı. Yeni buraxılış nömrələmə sxeminə əsasən, 13.0 versiyası inkişaf zamanı istifadə edilmişdir və GCC 13.1-in buraxılmasından bir müddət əvvəl, GCC 14.0 filialı artıq çəngəllənmişdi, bundan GCC 14.1-in növbəti əhəmiyyətli buraxılışı formalaşacaqdır.

Əsas dəyişikliklər:

  • GCC Modula-2 proqramlaşdırma dilində proqramların qurulması üçün bir ön plan qəbul etdi. O, PIM2, PIM3 və PIM4 dialektlərinə uyğun olan tikinti kodunu, eləcə də həmin dil üçün qəbul edilmiş ISO standartını dəstəkləyir.
  • GCC mənbə ağacına gccrs layihəsi (GCC Rust) tərəfindən hazırlanmış Rust dili kompilyatorunun tətbiqi ilə bir cəbhə əlavə edildi. Cari görünüşdə forntend eksperimental olaraq qeyd olunub və defolt olaraq qeyri-aktiv edilib. Frontend hazır olduqdan sonra (növbəti buraxılışda gözlənilir), standart GCC alətlər dəsti LLVM inkişaflarından istifadə edərək qurulmuş rustc kompilyatorunu quraşdırmadan Rust proqramlarını tərtib etmək üçün istifadə edilə bilər.
  • Link-in-Step Optimization (LTO) birdən çox mövzu üzrə paralel qurma icrasını optimallaşdırmaq üçün GNU make layihəsi tərəfindən dəstəklənən iş serveri (iş serveri) üçün dəstək əlavə edir. GCC-də iş serveri bütün proqram kontekstində LTO optimallaşdırması zamanı işi paralelləşdirmək üçün istifadə olunur (WPA, Whole-program Analysis). Adlandırılmış borular (--jobserver-style=fifo) iş serveri ilə əlaqə saxlamaq üçün standart olaraq istifadə olunur.
  • Statik analizator (-fanalyzer) "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite-recursion" -Wanalyzer-jump-"-nulllelarva",-".
  • JSON əsasında SARIF formatında diaqnostikanın çıxarılması imkanı tətbiq edilmişdir. Yeni format statik analiz nəticələrini (GCC -fanalyzer) əldə etmək, həmçinin xəbərdarlıqlar və səhvlər haqqında məlumat almaq üçün istifadə edilə bilər. Aktivləşdirmə "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file" seçimi ilə həyata keçirilir, burada "json" ilə seçimlər JSON formatının GCC-xüsusi variantında çıxışla nəticələnir.
  • C23 C standartında müəyyən edilmiş bəzi xüsusiyyətləri həyata keçirdi, məsələn, null göstəriciləri təyin etmək üçün nullptr sabiti, dəyişən arqumentlərlə (variadik) siyahılardan istifadəni asanlaşdırmaq, enumların imkanlarını genişləndirmək, noreturn atributunu, obyektləri təyin edərkən constexpr və auto istifadə etməyə imkan verən, typeof typeof, al_quals, al_quals, al_quals, al_quals, operator. false, static_assert, thread_local və true, ilkinləşdirmə zamanı boş mötərizələrə icazə verir.
  • C++23 standartında müəyyən edilmiş bəzi xüsusiyyətlər, məsələn, mürəkkəb ifadələrin sonunda etiketlər yerləşdirmək imkanı, char8_t növü ilə uyğunluq, #xəbərdarlıq preprosessor direktivi, ayrılmış (\u{}, \o{}, \x{}) və adlandırılmış ('\N{LATIN BÜYÜK HƏRFİ A}'), escape operatoru, escape operatoru, escape operatoru [keyfiyyət daxili operatoru] kimi tətbiq edilir. con stexpr istifadəsinə dair bəzi məhdudiyyətlər istisna olmaqla, mənbə kodunda UTF-8 dəstəyi.
  • libstdc++ başlıq faylı dəstəyi əlavə etmək kimi C++20 və C++23 standartları üçün təkmilləşdirilmiş eksperimental dəstəyə malikdir. və std::format, genişləndirilmiş başlıq faylı imkanları , əlavə üzən nöqtə növləri əlavə edildi, başlıq faylları həyata keçirildi Və .
  • Fayl deskriptorunun tam dəyişəndə ​​ötürülməsini sənədləşdirmək üçün yeni funksiya atributları əlavə edildi: "__attribute__((fd_arg(N)))), "__attribute__((fd_arg_read(N)))", və "__attribute__((fd_arg_write(N)))". Göstərilən atributlar fayl deskriptorları ilə düzgün olmayan işi aşkar etmək üçün statik analizatorda (-fanalyzer) istifadə edilə bilər.
  • Yeni "__attribute__((ehtimal(EXPR)))" atributu əlavə edildi ki, bu atributla siz tərtibçiyə ifadənin doğru olduğunu deyə bilərsiniz və tərtibçi ifadəni qiymətləndirmədən bu faktdan istifadə edə bilər.
  • Strukturlarda çevik massiv elementini emal edərkən davranışı seçmək üçün "-fstrict-flex-arrays=[level]" bayrağı əlavə edildi (Flexible Array Members, strukturun sonunda qeyri-müəyyən ölçülü massiv, məsələn, "int b[]").
  • Sadalanan tip və tam ədəd növü arasında uyğunsuzluq olduqda xəbərdarlıq etmək üçün "-Wenum-int-mismatch" bayrağı əlavə edildi.
  • Fortran cəbhəsi yekunlaşdırma üçün tam dəstəyə malikdir.
  • Ümumi funksiyalar və növlər üçün dəstək (generiklər) Go dili üçün ön hissəyə əlavə edildi və Go 1.18 dili üçün paketlərlə uyğunluq təmin edildi.
  • AArch64 arxa hissəsi CPU Amper-1A (ampere1a), Arm Cortex-A715 (korteks-a715), Arm Cortex-X1C (korteks-x1c), Arm Cortex-X3 (korteks-x3) və Arm Neoverse V2 (neoverse-v2) dəstəkləyir. "-march=" seçiminə "armv9.1-a", "armv9.2-a" və "armv9.3-a" arqumentləri üçün dəstək əlavə edildi. FEAT_LRCPC, FEAT_CSSC və FEAT_LSE2 prosessor genişləndirmələri üçün əlavə dəstək.
  • STAR-MC1 (star-mc1), Arm Cortex-X1C (korteks-x1c) və Arm Cortex-M85 (korteks-m85) CPU-larına dəstək ARM arxitekturasının arxa hissəsinə əlavə edilmişdir.
  • Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids və AMD Zen 86 (znver4) prosessorları üçün dəstək x4 backendinə əlavə edildi. Intel prosessorlarında təklif olunan AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT və AMX-COMPLEX təlimat dəsti arxitektura genişləndirmələri tətbiq edilmişdir. SSE2 ilə sistemlərdə C və C++ üçün __bf16 növü təmin edilir.
  • AMD Radeon GPU (GCN) üçün kod yaratmaq backend OpenMP/OpenACC performansını yaxşılaşdırmaq üçün AMD Instinct MI200 sürətləndiricilərindən istifadə etmək qabiliyyətini həyata keçirir. SIMD təlimatlarından istifadə edərək təkmilləşdirilmiş vektorlaşdırma.
  • LoongArch platforması üçün əhəmiyyətli dərəcədə genişləndirilmiş backend imkanları.
  • RISC-V arxa ucunda CPU T-Head-in XuanTie C906 (thead-c906) üçün əlavə dəstək. RISC-V Vector Extension Intrinsic 0.11 spesifikasiyasında müəyyən edilmiş vektor işləyiciləri üçün həyata keçirilən dəstək. 30 RISC-V spesifikasiyası genişləndirilməsi üçün əlavə dəstək.
  • "-shared" seçimi ilə paylaşılan obyektlər yaradarkən, "-Ofast", "-ffast-math" və ya "-funsafe-math-optimizations" optimallaşdırmaları aktiv olduqda, üzən nöqtə mühiti əlavə edildikdən sonra başlanğıc kodu artıq əlavə edilmir.
  • DWARF sazlama formatına dəstək demək olar ki, bütün konfiqurasiyalarda həyata keçirilir.
  • Zstandard alqoritmindən istifadə edərək sazlama məlumatını sıxışdırmaq üçün "-gz=zstd" seçimi əlavə edildi. "-gz=zlib-gnu" köhnəlmiş sazlama məlumatının sıxılma rejimi üçün dəstək silindi.
  • OpenMP 5.2 (Open Multi-Processing) üçün ilkin dəstək əlavə edildi və paylaşılan yaddaş və vektorlaşdırma vahidləri (SIMD) olan çoxnüvəli və hibrid (CPU + GPU / DSP) sistemlərdə paralel proqramlaşdırma metodlarının tətbiqi üçün API və metodları müəyyən edən OpenMP 5.0 və 5.1 standartlarının tətbiqi davam etdirildi.
  • 1980-ci illərdə yaradılmış və dbx sazlayıcısında istifadə edilən köhnə STABS sazlama məlumat yaddaşı formatı (-gstabs və -gxcoff seçimləri ilə aktivləşdirilmiş) üçün köhnəlmiş dəstək.
  • Solaris 11.3 üçün köhnəlmiş dəstək (bu platformanı dəstəkləmək üçün kod gələcək buraxılışda silinəcək).

Mənbə: opennet.ru

Добавить комментарий