การเปิดตัวชุดคอมไพเลอร์ 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-in-Step Optimization (LTO) เพิ่มการรองรับสำหรับเซิร์ฟเวอร์งาน (jobserver) ที่ดูแลโดย GNU make project เพื่อเพิ่มประสิทธิภาพการดำเนินการบิลด์แบบขนานในหลายๆ เธรด ใน GCC เซิร์ฟเวอร์งานจะใช้เพื่อทำงานแบบขนานระหว่างการปรับ LTO ให้เหมาะสมในบริบทของโปรแกรมทั้งหมด (WPA, การวิเคราะห์โปรแกรมทั้งหมด) ไปป์ที่มีชื่อ (--jobserver-style=fifo) ถูกใช้โดยค่าเริ่มต้นเพื่อโต้ตอบกับ jobserver
  • เครื่องวิเคราะห์แบบสแตติก (-fanalyzer) มีการตรวจสอบวินิจฉัยใหม่ 20 รายการ รวมถึง "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-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" ส่งผลให้เกิดเอาต์พุตในรูปแบบ JSON เฉพาะ GCC .
  • ใช้คุณสมบัติบางอย่างที่กำหนดไว้ในมาตรฐาน C23 C เช่นค่าคงที่ nullptr สำหรับการกำหนดพอยน์เตอร์ null ทำให้ง่ายต่อการใช้รายการที่มีจำนวนตัวแปรของอาร์กิวเมนต์ (variadic) ขยายความสามารถของ enums แอตทริบิวต์ noreturn อนุญาตให้ใช้ constexpr และ auto เมื่อกำหนดออบเจกต์ typeof และ 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 ในข้อความต้นฉบับ
  • ปรับปรุงการสนับสนุนการทดลองสำหรับมาตรฐาน C++20 และ C++23 ใน libstdc++ เช่น การเพิ่มการสนับสนุนไฟล์ส่วนหัว และ std::format ความสามารถของไฟล์ส่วนหัวแบบขยาย , เพิ่มประเภททศนิยมเพิ่มเติม, ใช้ไฟล์ส่วนหัว และ .
  • เพิ่มแอตทริบิวต์ของฟังก์ชันใหม่ในเอกสารที่ตัวอธิบายไฟล์ถูกส่งผ่านตัวแปรจำนวนเต็ม: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" และ "__attribute__((fd_arg_write(N) ))". แอตทริบิวต์ที่ระบุสามารถใช้ในตัววิเคราะห์แบบคงที่ (-fanalyzer) เพื่อตรวจหาการทำงานที่ไม่ถูกต้องกับตัวอธิบายไฟล์
  • มีการเพิ่มแอตทริบิวต์ใหม่ "__attribute__((สมมติ(EXPR)))" ซึ่งคุณสามารถบอกคอมไพเลอร์ได้ว่านิพจน์นั้นเป็นจริง และคอมไพเลอร์สามารถใช้ข้อเท็จจริงนี้ได้โดยไม่ต้องประเมินนิพจน์
  • เพิ่มแฟล็ก "-fstrict-flex-arrays=[level]" เพื่อเลือกลักษณะการทำงานเมื่อประมวลผลองค์ประกอบอาร์เรย์ที่ยืดหยุ่นในโครงสร้าง (Flexible Array Members, อาร์เรย์ที่มีขนาดไม่แน่นอนที่ส่วนท้ายของโครงสร้าง เช่น "int b[] ").
  • เพิ่มแฟล็ก "-Wenum-int-mismatch" เพื่อออกคำเตือนหากมีการไม่ตรงกันระหว่างประเภทที่ระบุและประเภทจำนวนเต็ม
  • ส่วนหน้าของ Fortran รองรับการสรุปอย่างสมบูรณ์
  • มีการเพิ่มการรองรับฟังก์ชันและประเภททั่วไป (generics) ในส่วนหน้าสำหรับภาษา 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
  • รองรับซีพียู STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) และ Arm Cortex-M85 (cortex-m85) ให้กับแบ็กเอนด์สถาปัตยกรรม ARM
  • รองรับโปรเซสเซอร์ Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids และ AMD Zen 86 (znver4) ในแบ็คเอนด์ x4 มีการใช้ส่วนขยายสถาปัตยกรรมชุดคำสั่ง AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT และ AMX-COMPLEX ที่เสนอในโปรเซสเซอร์ Intel สำหรับ C และ C++ บนระบบที่มี SSE2 จะมีประเภท __bf16 ไว้ให้
  • แบ็กเอนด์การสร้างรหัสสำหรับ AMD Radeon GPUs (GCN) ใช้ความสามารถในการใช้ตัวเร่งความเร็ว AMD Instinct MI200 เพื่อปรับปรุงประสิทธิภาพของ OpenMP/OpenACC ปรับปรุงเวกเตอร์โดยใช้คำสั่ง SIMD
  • ความสามารถด้านแบ็คเอนด์ที่เพิ่มขึ้นอย่างเห็นได้ชัดสำหรับแพลตฟอร์ม LoongArch
  • เพิ่มการรองรับ XuanTie C906 (thead-c906) ของ CPU T-Head ในแบ็กเอนด์ RISC-V ดำเนินการสนับสนุนสำหรับตัวจัดการเวกเตอร์ที่กำหนดไว้ในข้อมูลจำเพาะ RISC-V Vector Extension Intrinsic 0.11 เพิ่มการรองรับส่วนขยายข้อมูลจำเพาะ 30 RISC-V
  • เมื่อสร้างวัตถุที่ใช้ร่วมกันด้วยตัวเลือก "-shared" รหัสเริ่มต้นจะไม่ถูกเพิ่มอีกต่อไปหลังจากเพิ่มสภาพแวดล้อมของจุดลอยตัวหากเปิดใช้งานการปรับให้เหมาะสม "-Ofast", "-ffast-math" หรือ "-funsafe-math-optimizations" .
  • การสนับสนุนรูปแบบการดีบัก 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

เพิ่มความคิดเห็น