การเปิดตัวชุดคอมไพเลอร์ LLVM 13.0

หลังจากหกเดือนของการพัฒนา การเปิดตัวโครงการ LLVM 13.0 ได้ถูกนำเสนอ ซึ่งเป็นชุดเครื่องมือที่เข้ากันได้กับ GCC (คอมไพเลอร์ ตัวเพิ่มประสิทธิภาพ และตัวสร้างโค้ด) ที่รวบรวมโปรแกรมเป็นบิตโค้ดระดับกลางของคำสั่งเสมือนที่คล้ายกับ RISC (เครื่องเสมือนระดับต่ำที่มี ระบบการเพิ่มประสิทธิภาพหลายระดับ) รหัสจำลองที่สร้างขึ้นสามารถแปลงโดยคอมไพเลอร์ JIT เป็นคำสั่งเครื่องได้ทันทีที่ดำเนินการโปรแกรม

การปรับปรุงใน Clang 13.0:

  • ดำเนินการสนับสนุนสำหรับการเรียกหางที่รับประกัน (การเรียกรูทีนย่อยที่ส่วนท้ายสุดของฟังก์ชัน สร้างการเรียกซ้ำส่วนท้ายหากรูทีนย่อยเรียกตัวเอง) การสนับสนุนสำหรับการโทรหางที่รับประกันมีให้โดยแอตทริบิวต์ "[[clang::musttail]]" ใน C++ และ "__attribute__((musttail))" ใน C ซึ่งใช้ในคำสั่ง "return" คุณลักษณะนี้ช่วยให้คุณสามารถปรับใช้การปรับให้เหมาะสมได้โดยการปรับใช้โค้ดในการวนซ้ำแบบคงที่เพื่อประหยัดการใช้สแต็ก
  • การประกาศ "การใช้" และส่วนขยายเสียงดังกราวให้การสนับสนุนสำหรับการกำหนดคุณลักษณะสไตล์ C++ 11 โดยใช้รูปแบบ "[[]]"
  • เพิ่มแฟล็ก "-Wreserved-identifier" เพื่อแสดงคำเตือนเมื่อคุณระบุตัวระบุที่สงวนไว้ในรหัสผู้ใช้
  • เพิ่มแฟล็ก "-Wunused-but-set-parameter" และ "-Wunused-but-set-variable" เพื่อแสดงคำเตือนหากมีการตั้งค่าพารามิเตอร์หรือตัวแปรแต่ไม่ได้ใช้
  • เพิ่มการตั้งค่าสถานะ "-Wnull-pointer-subtraction" เพื่อออกคำเตือนหากโค้ดอาจแนะนำพฤติกรรมที่ไม่ได้กำหนดไว้เนื่องจากการใช้ตัวชี้ค่าว่างในการดำเนินการลบ
  • เพิ่มแฟล็ก "-fstack-usage" เพื่อสร้างไฟล์ ".su" เพิ่มเติมสำหรับแต่ละไฟล์โค้ดซึ่งมีข้อมูลเกี่ยวกับขนาดของเฟรมสแต็กสำหรับแต่ละฟังก์ชันที่กำหนดไว้ในไฟล์ที่กำลังประมวลผล
  • มีการเพิ่มประเภทเอาต์พุตใหม่ลงในเครื่องวิเคราะห์แบบคงที่ - “sarif-html” ซึ่งนำไปสู่การสร้างรายงานพร้อมกันในรูปแบบ HTML และ Sarif เพิ่มการตรวจสอบ allocClassWithName ใหม่ เมื่อระบุตัวเลือก “-analyzer-display-progress” เวลาการวิเคราะห์ของแต่ละฟังก์ชันจะปรากฏขึ้น เครื่องวิเคราะห์ตัวชี้อัจฉริยะ (alpha.cplusplus.SmartPtr) เกือบจะพร้อมใช้งานแล้ว
  • ความสามารถที่เกี่ยวข้องกับการรองรับ OpenCL ได้รับการขยายแล้ว เพิ่มการสนับสนุนสำหรับส่วนขยายใหม่ cl_khr_integer_dot_product, cl_khr_extend_bit_ops, __cl_clang_bitfields และ __cl_clang_non_portable_kernel_param_types การดำเนินการตามข้อกำหนด OpenCL 3.0 ยังคงดำเนินต่อไป สำหรับ C ข้อกำหนด OpenCL 1.2 จะถูกใช้เป็นค่าเริ่มต้น เว้นแต่จะเลือกเวอร์ชันอื่นไว้อย่างชัดเจน สำหรับ C++ ได้เพิ่มการรองรับไฟล์ที่มีนามสกุล “.clcpp” แล้ว
  • มีการใช้คำสั่งการแปลงลูป (“#pragma omp unrol” และ “#pragma omp Tile”) ที่กำหนดไว้ในข้อกำหนด OpenMP 5.1 แล้ว
  • เพิ่มตัวเลือกให้กับยูทิลิตี้รูปแบบเสียงดังกราว: SpacesInLineCommentPrefix เพื่อกำหนดจำนวนช่องว่างก่อนความคิดเห็น IndentAccessModifiers, LambdaBodyIndentation และ PPIndentWidth เพื่อควบคุมการจัดตำแหน่งของรายการ นิพจน์ lambda และคำสั่งของตัวประมวลผลล่วงหน้า ขยายความเป็นไปได้ในการเรียงลำดับไฟล์ส่วนหัว (SortIncludes) แล้ว เพิ่มการรองรับการจัดรูปแบบไฟล์ JSON
  • มีการเพิ่มเช็คใหม่ส่วนใหญ่ลงใน linter clang-tidy

นวัตกรรมที่สำคัญใน LLVM 13.0:

  • เพิ่มตัวเลือก “-ehcontguard” เพื่อใช้เทคโนโลยี CET (Windows Control-flow Enforcement Technology) เพื่อป้องกันการดำเนินการหาช่องโหว่ที่สร้างขึ้นโดยใช้เทคนิค Return-Oriented Programming (ROP) ในขั้นตอนการจัดการข้อยกเว้น
  • โปรเจ็กต์การทดสอบ debuginfo ได้รับการเปลี่ยนชื่อเป็นการทดสอบข้ามโปรเจ็กต์ และได้รับการออกแบบมาเพื่อทดสอบส่วนประกอบจากโปรเจ็กต์ต่างๆ ไม่จำกัดเฉพาะข้อมูลการดีบัก
  • ระบบแอสเซมบลีให้การสนับสนุนสำหรับการสร้างดิสทริบิวชันหลายตัว เช่น หนึ่งตัวพร้อมยูทิลิตี้ และอีกตัวหนึ่งมีไลบรารีสำหรับนักพัฒนา
  • ในแบ็กเอนด์สำหรับสถาปัตยกรรม AArch64 จะมีการรองรับส่วนขยาย Armv9-A RME (Realm Management Extension) และ SME (Scalable Matrix Extension) ในแอสเซมเบลอร์
  • เพิ่มการรองรับ ISA V68/HVX ให้กับแบ็กเอนด์สำหรับสถาปัตยกรรม Hexagon แล้ว
  • แบ็กเอนด์ x86 ได้รับการปรับปรุงการรองรับโปรเซสเซอร์ AMD Zen 3
  • เพิ่มการรองรับ GFX1013 RDNA2 APU ให้กับแบ็กเอนด์ AMDGPU
  • Libc++ ยังคงใช้คุณสมบัติใหม่ของมาตรฐาน C++20 และ C++2b ต่อไป รวมถึงความสมบูรณ์ของไลบรารี “แนวคิด” เพิ่มการรองรับ std::filesystem สำหรับแพลตฟอร์ม Windows ที่ใช้ MinGW ไฟล์ส่วนหัวแยกออกจากกัน , และ . เพิ่มตัวเลือกการสร้าง LIBCXX_ENABLE_INCOMPLETE_FEATURES เพื่อปิดการใช้งานไฟล์ส่วนหัวที่มีฟังก์ชันการใช้งานไม่ครบถ้วน
  • ความสามารถของตัวเชื่อมโยง LLD ได้รับการขยายซึ่งมีการใช้งานตัวประมวลผล Big-endian Aarch64 และแบ็กเอนด์ Mach-O ได้ถูกนำเข้าสู่สถานะที่อนุญาตให้เชื่อมโยงโปรแกรมปกติได้ รวมการปรับปรุงที่จำเป็นในการเชื่อมโยง Glibc โดยใช้ LLD
  • ยูทิลิตี้ llvm-mca (Machine Code Analyzer) ได้เพิ่มการรองรับโปรเซสเซอร์ที่ดำเนินการคำสั่งตามลำดับ (ไปป์ไลน์ซูเปอร์สเกลาร์ตามลำดับ) เช่น ARM Cortex-A55
  • ดีบักเกอร์ LLDB สำหรับแพลตฟอร์ม AArch64 ให้การสนับสนุนอย่างเต็มที่สำหรับ Pointer Authentication, MTE (MemTag, Memory Tagging Extension) และการลงทะเบียน SVE เพิ่มคำสั่งที่อนุญาตให้คุณผูกแท็กกับการดำเนินการจัดสรรหน่วยความจำแต่ละครั้ง และจัดระเบียบการตรวจสอบตัวชี้เมื่อเข้าถึงหน่วยความจำ ซึ่งจะต้องเชื่อมโยงกับแท็กที่ถูกต้อง
  • ดีบักเกอร์ LLDB และส่วนหน้าสำหรับภาษา Fortran - Flang ได้รับการเพิ่มเข้ากับแอสเซมบลีไบนารีที่สร้างโดยโครงการ

ที่มา: opennet.ru

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