วงการพัฒนาซอฟต์แวร์ได้ต้อนรับผู้เล่นรายใหม่ด้วยการเปิดตัว 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