Linker ตัวใหม่ที่พัฒนาด้วย Rust ชื่อ 'Wild' แสดงให้เห็นประสิทธิภาพที่เร็วกว่า Mold ถึง 2 เท่า

BigGo Editorial Team
Linker ตัวใหม่ที่พัฒนาด้วย Rust ชื่อ 'Wild' แสดงให้เห็นประสิทธิภาพที่เร็วกว่า Mold ถึง 2 เท่า

วงการพัฒนาซอฟต์แวร์ได้ต้อนรับผู้เล่นรายใหม่ด้วยการเปิดตัว Wild ซึ่งเป็น linker ที่พัฒนาด้วยภาษา Rust และแสดงให้เห็นถึงการพัฒนาประสิทธิภาพที่น่าประทับใจเมื่อเทียบกับโซลูชันที่มีอยู่ แม้ว่าจะอยู่ในช่วงเริ่มต้น แต่ Wild ก็ได้ดึงดูดความสนใจจากชุมชนนักพัฒนา ด้วยความเร็วที่สูงกว่า Mold ถึงสองเท่าในบางสถานการณ์ ซึ่งถือเป็นความก้าวหน้าที่สำคัญในเทคโนโลยีการเชื่อมโยง

การพัฒนาประสิทธิภาพที่น่าทึ่ง

ผลการทดสอบเบื้องต้นของ Wild แสดงให้เห็นผลลัพธ์ที่น่าประทับใจ โดยเฉพาะในการ build ที่ไม่มีข้อมูล debug การทดสอบจากชุมชนแสดงให้เห็นว่า Wild มีประสิทธิภาพที่เหนือกว่า linker ที่มีอยู่อย่างมีนัยสำคัญ เมื่อทำการเชื่อมโยง rustc-driver และ clang โดยไม่มีข้อมูล debug ความได้เปรียบด้านประสิทธิภาพนี้ได้สร้างความสนใจอย่างมาก โดยเฉพาะเมื่อพิจารณาว่า Mold เคยถูกมองว่าเป็นตัวเลือกที่เร็วที่สุดที่มีอยู่

ดูเหมือนว่าคุณกำลังสร้างจากศูนย์ ในกรณีนี้ เวลาส่วนใหญ่จะถูกใช้ไปกับการคอมไพล์โค้ด ไม่ใช่การเชื่อมโยง กรณีที่ต้องการ linker ที่เร็วจะเห็นได้ชัดเจนที่สุดในการพัฒนาแบบต่อเนื่อง

การเปรียบเทียบเวลาในการลิงก์ (rustc-driver โดยไม่มีข้อมูลดีบัก):

  • GNU ld (2.38): 20,774 มิลลิวินาที
  • gold (2.38): 6,796 มิลลิวินาที
  • lld (18.1.8): 1,601 มิลลิวินาที
  • mold (2.34.1): 946 มิลลิวินาที
  • wild (2024-11-30): 486 มิลลิวินาที

การผลักดันการเชื่อมโยงแบบต่อเนื่อง

จุดเด่นสำคัญของ Wild คือการวางแผนที่จะรองรับการเชื่อมโยงแบบต่อเนื่อง ซึ่งเป็นฟีเจอร์ที่ไม่มีใน linker สมัยใหม่อื่นๆ รวมถึง Mold ชุมชนได้ชี้ให้เห็นว่านี่เป็นช่องว่างที่สำคัญในเครื่องมือพัฒนาบน Linux โดยเฉพาะเมื่อเทียบกับ linker ของ Microsoft ที่รองรับการเชื่อมโยงแบบต่อเนื่องมาหลายทศวรรษ ความสามารถนี้อาจช่วยปรับปรุงรอบการพัฒนาให้ดีขึ้นอย่างมาก โดยการเชื่อมโยงเฉพาะส่วนที่มีการเปลี่ยนแปลงแทนที่จะต้องเชื่อมโยงโปรแกรมทั้งหมดใหม่

บทบาทของ Rust ในระบบที่ซับซ้อน

การเลือกใช้ Rust ในการพัฒนา Wild ได้สร้างการถกเถียงที่น่าสนใจ สมาชิกในชุมชนชี้ให้เห็นว่าระบบ type ที่เข้มงวดและการรับประกันความปลอดภัยของ Rust ทำให้เหมาะสมอย่างยิ่งสำหรับการจัดการความซับซ้อนของการเชื่อมโยงแบบต่อเนื่อง แม้ว่าจะมีการถกเถียงถึงความจำเป็นของ linker ตัวใหม่หลังจากที่ Mold ได้เปลี่ยนไปใช้ลิขสิทธิ์ MIT แต่การมุ่งเน้นที่การเชื่อมโยงแบบต่อเนื่องและคุณสมบัติด้านความปลอดภัยของ Rust ก็นำเสนอเหตุผลที่น่าสนใจสำหรับการพัฒนา Wild

ข้อจำกัดในปัจจุบัน

แม้จะมีประสิทธิภาพที่น่าสนใจ แต่ Wild ยังอยู่ในช่วงเริ่มต้นของการพัฒนาและมีข้อจำกัดหลายประการ ปัจจุบันรองรับเฉพาะ x86-64 บน Linux ยังไม่รองรับ LTO (Link Time Optimization) และยังไม่ได้พัฒนาฟีเจอร์การเชื่อมโยงแบบต่อเนื่องที่วางแผนไว้ ความเห็นของชุมชนแนะนำให้รอก่อนที่จะนำ Wild ไปใช้ในสภาพแวดล้อมการผลิตจริง แม้ว่าความคืบหน้าในการพัฒนาจะได้รับการติดตามอย่างใกล้ชิด

ข้อจำกัดปัจจุบันของ Wild:

  • รองรับเฉพาะ x86-64 บน Linux เท่านั้น
  • ยังไม่รองรับการลิงค์แบบเพิ่มเติม
  • รองรับตัวเลือกของลิงเกอร์อย่างจำกัด
  • ไม่รองรับสคริปต์ลิงเกอร์
  • ไม่รองรับระบบปฏิบัติการ Mac และ Windows
  • ไม่รองรับ LTO

จุดเน้นในการพัฒนา

การเน้นที่ประสิทธิภาพในช่วงการพัฒนามากกว่าการ build สำหรับการผลิตได้รับการตอบรับที่ดีจากนักพัฒนา แนวทางนี้สอดคล้องกับความต้องการของขั้นตอนการพัฒนาสมัยใหม่ โดยเฉพาะในโปรเจกต์ Rust ที่เวลาในการเชื่อมโยงอาจกลายเป็นคอขวดระหว่างการพัฒนาแบบต่อเนื่อง

หมายเหตุทางเทคนิค:

  • LTO (Link Time Optimization): เทคนิคการคอมไพล์ที่ช่วยให้คอมไพเลอร์สามารถทำการ optimize ข้ามไฟล์ต้นฉบับหลายไฟล์ได้
  • การเชื่อมโยงแบบต่อเนื่อง: เทคนิคที่เชื่อมโยงเฉพาะส่วนของโค้ดที่มีการเปลี่ยนแปลงแทนที่จะเชื่อมโยงโปรแกรมทั้งหมดใหม่
  • RAII (Resource Acquisition Is Initialization): รูปแบบการเขียนโปรแกรมที่ใช้ใน Rust สำหรับการจัดการทรัพยากร

อ้างอิง: Wild Linker