การเปิดตัวของ TopoSort ไลบรารี Zig ใหม่สำหรับการเรียงลำดับทางโทโพโลยีของกราฟการพึ่งพา ได้จุดประกายการสนทนาในหมู่นักพัฒนาเกี่ยวกับการประยุกต์ใช้งานจริงและระบบนิเวศที่กำลังเติบโตของ Zig ไลบรารีนี้นำเสนอโซลูชันที่มีประสิทธิภาพสำหรับการจัดการการพึ่งพาที่ซับซ้อน โดยผลการทดสอบประสิทธิภาพแสดงให้เห็นถึงสมรรถนะที่น่าประทับใจสำหรับชุดข้อมูลขนาดใหญ่
การประยุกต์ใช้งานจริงนอกเหนือจากแบบฝึกหัดทางวิชาการ
แม้ว่าการเรียงลำดับทางโทโพโลยีอาจดูเหมือนเป็นแนวคิดพื้นฐานทางวิทยาการคอมพิวเตอร์ สมาชิกในชุมชนได้เน้นย้ำถึงการประยุกต์ใช้งานจริงหลายประการสำหรับ TopoSort นักพัฒนาคนหนึ่งกล่าวถึงการใช้ฟังก์ชันที่คล้ายกันสำหรับการเริ่มและปิดบริการของระบบปฏิบัติการเมื่อกว่า 20 ปีที่แล้ว ในขณะที่อีกคนหนึ่งแนะนำให้นำไปใช้ในตัวแก้ไขโหนดของ OpenCV เพื่อหลีกเลี่ยงการคำนวณโหนดซ้ำหลายครั้ง ความสามารถของไลบรารีในการตรวจจับวงจรและสร้างชุดย่อยที่ไม่มีการพึ่งพาสำหรับการประมวลผลแบบขนานทำให้มีคุณค่าเป็นพิเศษสำหรับการใช้งานในโลกแห่งความเป็นจริง
ผมได้นำการเรียงลำดับทางโทโพโลยีมาใช้สำหรับการเริ่มและปิดบริการของระบบปฏิบัติการตามลำดับเมื่อประมาณ 20 ปีที่แล้ว แต่มันเป็นเพียงวิธีที่รวดเร็วและไม่เป็นทางการ ไม่เคยเผยแพร่เป็นไลบรารีอย่างเป็นทางการ
ผลการทดสอบประสิทธิภาพแสดงผลลัพธ์ที่น่าประทับใจ
ผู้สร้าง TopoSort ได้แบ่งปันผลการทดสอบประสิทธิภาพที่แสดงให้เห็นว่าไลบรารีสามารถประมวลผลคู่การพึ่งพาหนึ่งล้านคู่ในเวลาเพียงไม่กี่สิบมิลลิวินาทีบนแล็ปท็อปที่มีอายุห้าปี ในการทดสอบที่เปิดใช้งานการปรับแต่ง max_range ไลบรารีสามารถทำงานได้ด้วยปริมาณการรับส่งข้อมูลที่น่าประทับใจเกือบ 40 ล้านรายการต่อวินาทีเมื่อเพิ่มการพึ่งพา ประสิทธิภาพนี้ทำให้เหมาะสำหรับแอปพลิเคชันขนาดใหญ่ที่การจัดการการพึ่งพามีความสำคัญ
คุณสมบัติหลักของ TopoSort
- การสร้างกราฟการพึ่งพาจากข้อมูลการพึ่งพา
- การทำ topological sort บนกราฟการพึ่งพา
- การสร้างชุดย่อยที่ไม่มีการพึ่งพาสำหรับการประมวลผลแบบขนาน
- การตรวจจับและรายงานวงจร
- รองรับประเภทโหนดที่แตกต่างกัน
ผลการทดสอบประสิทธิภาพ
- 1,000,000 รายการ (การเชื่อมโยงแบบ 1-ต่อ-1):
- เพิ่มการพึ่งพา: 93 มิลลิวินาที (10,645,885 รายการ/วินาที)
- การเรียงลำดับ: 113 มิลลิวินาที (8,795,778 รายการ/วินาที)
- 1,000,000 รายการ (การเชื่อมโยงแบบ 1-ต่อ-10) ด้วยการปรับปรุงประสิทธิภาพ max_range:
- เพิ่มการพึ่งพา: 25 มิลลิวินาที (39,460,028 รายการ/วินาที)
- การเรียงลำดับ: 31 มิลลิวินาที (31,633,556 รายการ/วินาที)
ความสามารถในการประมวลผลแบบขนาน
คุณลักษณะที่โดดเด่นของ TopoSort คือความสามารถในการสร้างชุดย่อยที่ไม่มีการพึ่งพาสำหรับการประมวลผลแบบขนาน ฟังก์ชันนี้ระบุโหนดที่สามารถประมวลผลพร้อมกันโดยไม่ต้องพึ่งพากันและกัน ซึ่งอาจช่วยปรับปรุงประสิทธิภาพในแอปพลิเคชันแบบหลายเธรด เมื่อถูกถามเกี่ยวกับรายละเอียดการนำไปใช้ นักพัฒนาได้อธิบายว่าอัลกอริทึมจะรวบรวมโหนดทั้งหมดที่มีระดับขาเข้าเป็นศูนย์ (ไม่ขึ้นอยู่กับโหนดอื่น) เป็นชุดย่อยที่ไม่มีการพึ่งพาในแต่ละรอบของการประมวลผล
เครื่องมือการเรียนรู้สำหรับนักพัฒนา Zig
ผู้แสดงความคิดเห็นหลายคนชื่นชม TopoSort ไม่เพียงแต่สำหรับฟังก์ชันการทำงานเท่านั้น แต่ยังเป็นโครงการตัวอย่างสำหรับผู้ที่กำลังเรียนรู้ Zig โครงการนี้แสดงให้เห็นถึงโครงสร้างแพ็คเกจที่เหมาะสม การนำไปใช้เป็นเครื่องมือ CLI และการออกแบบไลบรารีใน Zig นักพัฒนากล่าวว่าการสร้างไลบรารีที่มีคุณสมบัติครบถ้วนพร้อมการจัดการข้อผิดพลาดที่เหมาะสมและอินเตอร์เฟซที่เป็นมิตรกับผู้ใช้ต้องใช้โค้ดมากกว่าอัลกอริทึมหลัก (ประมาณ 20 บรรทัด) ซึ่งเน้นให้เห็นถึงความแตกต่างระหว่างแนวคิดกับผลิตภัณฑ์
การอภิปรายเกี่ยวกับภาษา Zig
การประกาศ TopoSort ยังกระตุ้นให้เกิดการอภิปรายในวงกว้างเกี่ยวกับ Zig ในฐานะภาษาโปรแกรมมิ่ง นักพัฒนาบางคนแสดงความกระตือรือร้นต่อความสามารถของ Zig ในขณะที่สังเกตเห็นข้อจำกัด โดยเฉพาะอย่างยิ่งเกี่ยวกับคุณลักษณะในช่วงเวลาคอมไพล์ นักพัฒนาคนหนึ่งกล่าวว่าพวกเขาพบว่า Zig ดีกว่า C/C++ ในหลายกรณี แต่กำลังรอคุณลักษณะในช่วงเวลาคอมไพล์บางอย่างก่อนที่จะมุ่งมั่นกับโครงการที่ใหญ่ขึ้น คนอื่นๆ ถกเถียงเกี่ยวกับตัวเลือกไวยากรณ์ โดยบางคนพบว่าไวยากรณ์อาร์เรย์ของ Zig ไม่เป็นไปตามสัญชาตญาณเมื่อเทียบกับภาษาอย่าง Rust
โดยสรุป TopoSort เป็นทั้งเครื่องมือที่มีประโยชน์สำหรับการจัดการการพึ่งพาและเป็นตัวอย่างที่มีคุณภาพของการพัฒนาไลบรารี Zig การตอบสนองของชุมชนบ่งชี้ถึงความสนใจที่เพิ่มขึ้นในระบบนิเวศของ Zig และการประยุกต์ใช้หลักการพื้นฐานของวิทยาการคอมพิวเตอร์ในการพัฒนาซอฟต์แวร์สมัยใหม่