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 стандартыг дэмждэг.
  • GCC-ийн эх модонд gccrs төслөөс (GCC Rust) бэлтгэсэн Rust хэлний хөрвүүлэгчийн хэрэгжүүлэлт бүхий нүүр хэсэг нэмэгдсэн. Одоогийн хэлбэрээр, урагшлах төгсгөлийг туршилтын гэж тэмдэглэсэн бөгөөд анхдагчаар идэвхгүй байна. Frontend бэлэн болмогц (дараагийн хувилбарт гарах болно) стандарт GCC хэрэгслүүдийг LLVM хөгжүүлэлтийг ашиглан бүтээсэн rustc хөрвүүлэгчийг суулгах шаардлагагүйгээр Rust хэл дээрх програмуудыг эмхэтгэх боломжтой.
  • Link Time Optimization (LTO) хөдөлгүүр нь GNU make төслөөр дэмжигдсэн ажлын серверийн дэмжлэгийг нэмсэн бөгөөд энэ нь олон урсгалтай зэрэгцээ бүтээцийг оновчтой болгох явдал юм. GCC-д ажлын серверийг бүхэл хөтөлбөрийн хүрээнд (WPA, Whole-program Analysis) LTO оновчтой болгох үед ажлыг зэрэгцүүлэхэд ашигладаг. Ажлын сервертэй харилцахын тулд нэрлэсэн хоолойнуудыг анхдагчаар ашигладаг (-jobserver-style=fifo).
  • Статик анализатор (-fanalyzer) нь "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-for-check", "-Wanalyzer- infinite" зэрэг 20 шинэ оношлогооны шалгалтыг санал болгодог. -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • JSON дээр суурилсан SARIF форматаар оношилгоо гаргах боломжийг хэрэгжүүлсэн. Шинэ форматыг статик шинжилгээний үр дүнг (GCC -fanalyzer) авахаас гадна анхааруулга, алдааны мэдээллийг олж авахад ашиглаж болно. Идэвхжүүлэх нь "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file" гэсэн сонголтоор хийгдэх бөгөөд "json"-той сонголтууд нь JSON форматын GCC-д зориулсан хувилбараар гарна. .
  • C23 C стандартад тодорхойлсон зарим функцуудыг хэрэгжүүлсэн, тухайлбал, тэг заагчийг тодорхойлох nullptr тогтмол, вариак жагсаалтын хэрэглээг хялбарчлах, тооллогын чадавхийг өргөжүүлэх, noreturn шинж чанар, объектыг тодорхойлохдоо constexpr болон auto ашиглахыг зөвшөөрөх, төрөл мөн typeof_unqual, шинэ түлхүүр үгс alignas, alignof, bool, false, static_assert, thread_local болон true зэрэг нь эхлүүлэх үед хоосон хашилтыг зааж өгөх боломжийг олгодог.
  • C++23 стандартад тодорхойлсон нийлмэл илэрхийллийн төгсгөлд тэмдэг тавих чадвар, char8_t төрөлтэй нийцтэй байх, #warning preprocessor заавар, тусгаарлагдсан (\u{}, \o{}, \x{}) болон нэртэй ('\N{ЛАТИН ТОМ ҮСГЭЭН}') зугтах дараалал, статик оператор(), статик оператор[], илэрхийлэл доторх тэгш байдлын оператор, constexpr ашиглах зарим хязгаарлалтыг арилгах, UTF-г дэмжих -Эх бичвэрт 8.
  • libstdc++ нь C++20 болон C++23 стандартуудын туршилтын дэмжлэгийг сайжруулсан, жишээ нь толгой файлын дэмжлэгийг нэмсэн. болон std::format, өргөтгөсөн толгой файлын боломжууд , нэмэлт хөвөгч цэгийн төрлүүд нэмэгдсэн, толгой файлуудыг хэрэгжүүлсэн Тэгээд .
  • Файл тодорхойлогчийг бүхэл тоон хувьсагчаар дамжуулсан баримт бичигт шинэ функцийн шинж чанаруудыг нэмсэн: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" болон "__attribute__((fd_arg_write(N))) ) " Заасан шинж чанаруудыг статик анализаторт (-fanalyzer) ашиглаж файлын тодорхойлогчтой буруу үйлдлийг илрүүлэх боломжтой.
  • “__attribute__((exsume(EXPR)))” гэсэн шинэ атрибут нэмсэн бөгөөд үүний тусламжтайгаар та илэрхийлэл үнэн гэдгийг хөрвүүлэгчид хэлэх боломжтой бөгөөд хөрвүүлэгч илэрхийллийг үнэлэхгүйгээр энэ баримтыг ашиглах боломжтой.
  • "-fstrict-flex-arrays=[level]" гэсэн тугийг бүтцэд уян хатан массивын элементүүдтэй ажиллах үед хэрхэн ажиллахыг сонгохын тулд нэмсэн (Уян хатан массивын гишүүд, бүтцийн төгсгөлд тодорхой бус хэмжээтэй массив, жишээлбэл, "int b[]" ).
  • "-Wenum-int-mismatch" гэсэн тэмдэглэгээг нэмсэн бөгөөд тооллын төрөл болон бүхэл тооны төрөл хоёрын хооронд тохирохгүй байна.
  • Фортран хэлний урд тал нь эцсийн хувилбарыг бүрэн дэмждэг.
  • Go хэлний урд хэсэгт ерөнхий функц, төрлүүдийн (ерөнхий) дэмжлэг нэмэгдсэн бөгөөд Go хэлний 1.18 багцтай нийцтэй байдлыг хангасан.
  • AArch64 архитектурын арын хэсэг нь CPU Ampere-1A (ampere1a), Arm Cortex-A715 (кортекс-a715), Arm Cortex-X1C (cotex-x1c), Arm Cortex-X3 (cotex-x3) болон Arm Neoverse V2 (neoverse)-ийг дэмждэг. -v2). "-march=" сонголтод "armv9.1-a", "armv9.2-a" болон "armv9.3-a" аргументуудын дэмжлэгийг нэмсэн. FEAT_LRCPC, FEAT_CSSC болон FEAT_LSE2 процессорын өргөтгөлүүдийн дэмжлэгийг нэмсэн.
  • CPU-ийн STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) болон Arm Cortex-M85 (cortex-m85)-ийн дэмжлэгийг ARM архитектурын арын хэсэгт нэмсэн.
  • X86 архитектурт зориулсан backend нь Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids процессорууд, мөн AMD Zen 4 (znver4) процессоруудад дэмжлэг үзүүлдэг. Intel процессоруудад санал болгож буй AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT болон AMX-COMPLEX гэсэн зааврын архитектурын өргөтгөлүүдийг хэрэгжүүлсэн. SSE2 систем дээрх C ба C++ хэлний хувьд __bf16 төрлийг өгсөн.
  • AMD Radeon GPU (GCN)-д зориулсан код үүсгэх арын хэсэг нь OpenMP/OpenACC гүйцэтгэлийг сайжруулахын тулд AMD Instinct MI200 хурдасгуурыг ашиглах боломжийг агуулдаг. SIMD зааврыг ашиглан векторжуулалтыг сайжруулсан.
  • LoongArch платформын нөөц боломжууд мэдэгдэхүйц өргөжсөн.
  • RISC-V архитектурын арын хэсэгт T-Head-ийн XuanTie C906 (thead-c906) CPU-ийн дэмжлэг нэмэгдсэн. RISC-V Vector Extension Intrinsic 0.11 тодорхойлолтод тодорхойлсон вектор процессоруудын дэмжлэгийг хэрэгжүүлсэн. RISC-V тодорхойлолтод 30 өргөтгөлийн дэмжлэг нэмсэн.
  • Хуваалцсан объектуудыг -shared сонголтоор үүсгэх нь -Ofast, -ffast-math, эсвэл -funsafe-math-оновчлолыг идэвхжүүлсэн тохиолдолд хөвөгч цэгийн орчин нэмсний дараа эхлүүлэх код нэмэхийг зогсооно.
  • DWARF дибаг хийх форматыг дэмжих нь бараг бүх тохиргоонд хэрэгждэг.
  • Zstandard алгоритмыг ашиглан дибаг хийх мэдээллийг шахах "-gz=zstd" сонголтыг нэмсэн. Хуучин "-gz=zlib-gnu" дибаг хийх шахалтын горимыг дэмжихээ больсон.
  • OpenMP 5.2 (Open Multi-Processing)-ийн анхны дэмжлэгийг нэмсэн ба OpenMP 5.0 болон 5.1 стандартуудыг үргэлжлүүлэн хэрэгжүүлэх нь API болон олон цөмт болон холимог санах ойтой эрлийз (CPU+GPU/DSP) системд зэрэгцээ програмчлалын аргуудыг хэрэглэх аргуудыг тодорхойлсон. ба векторжуулалтын нэгжүүд (SIMD).
  • 1980-аад онд бүтээгдсэн, dbx дибаг хийгчид ашигласан "STABS" дибаг хийх мэдээллийн хадгалалтын форматыг (-gstabs болон -gxcoff сонголтоор идэвхжүүлсэн) дэмжихээ больсон.
  • Solaris 11.3-ийн дэмжлэгийг цуцалсан (энэ платформыг дэмжих кодыг дараагийн хувилбарт устгах болно).

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх