ระบบนิเวศโอเพนซอร์ส Nix กำลังได้เห็นการพัฒนาที่น่าตื่นเต้นกับ nix-ninja เครื่องมือที่สัญญาว่าจะปฏิวัติขั้นตอนการคอมไพล์โดยใช้ประโยชน์จากฟีเจอร์ทดลอง dynamic derivations ของ Nix นวัตกรรมนี้ได้สร้างความสนใจอย่างมากในชุมชนนักพัฒนา โดยเฉพาะในกลุ่มผู้ที่ทำงานกับระบบการสร้างที่ซับซ้อน
Dynamic Derivations: เส้นทางสู่การเปิดตัวเวอร์ชันเสถียร
หนึ่งในประเด็นที่มีการพูดถึงมากที่สุดในชุมชนคือกรอบเวลาสำหรับการทำให้ dynamic derivations ใน Nix มีความเสถียร ปัจจุบัน nix-ninja ต้องพึ่งพาฟีเจอร์ทดลองจากเวอร์ชัน Nix ที่ยังไม่ได้เปิดตัว ซึ่งทำให้เกิดคำถามว่าฟีเจอร์เหล่านี้จะได้รับการสนับสนุนอย่างเป็นทางการเมื่อใด
นักพัฒนาหลักของ Nix ที่เกี่ยวข้องกับ dynamic derivations ได้ให้ความชัดเจนเกี่ยวกับแผนงาน โดยอธิบายว่า dynamic derivations ขึ้นอยู่กับ content-addressing derivations ซึ่งอยู่ในสถานะฟีเจอร์ทดลองมาระยะหนึ่งแล้ว อย่างไรก็ตาม ด้วยความพยายามที่มุ่งเน้นและการจัดการขอบเขต การทำให้เสถียรอาจเป็นไปได้ในอนาคตอันใกล้ นักพัฒนาอธิบายว่างานที่เหลืออยู่ไม่ได้มากมายจริงๆ แม้จะเป็นชุดของ yak shaves - คำที่หมายถึงลำดับของงานที่ดูเหมือนไม่เกี่ยวข้องกันซึ่งต้องทำให้เสร็จก่อนที่จะจัดการกับเป้าหมายหลัก
ศักยภาพด้านประสิทธิภาพสำหรับการสร้างที่ซับซ้อน
ผลกระทบด้านประสิทธิภาพของ nix-ninja มีความน่าสนใจเป็นพิเศษ เครื่องมือนี้มีเป้าหมายที่จะเปิดใช้งานการคอมไพล์แบบเพิ่มเติมอย่างแท้จริง ซึ่งการเปลี่ยนแปลงไฟล์ C/C++ เพียงไฟล์เดียวในกราฟการสร้างจะต้องคอมไพล์เฉพาะไฟล์นั้นใหม่และเชื่อมโยงเฉพาะไฟล์ที่ทำงานได้หรือไลบรารีที่ใช้ร่วมกันที่ได้รับผลกระทบเท่านั้น
แม้จะยังอยู่ในระหว่างการพัฒนา การทดสอบเบื้องต้นแสดงให้เห็นว่าค่าโสหุ้ยของการแซนด์บ็อกซ์ของ Nix มีน้อยมากสำหรับงานการคอมไพล์แบบเพิ่มเติม อย่างไรก็ตาม ฟีเจอร์บางอย่างยังขาดอยู่ เช่น การจัดการเป้าหมายที่ขึ้นอยู่กับไฟล์ซอร์สที่สร้างขึ้น (เช่น ตัวแยกวิเคราะห์ bison ของ Nix) ซึ่งปัจจุบันกำลังถูกติดตามเป็นปัญหาที่ยังเปิดอยู่
เป้าหมายระยะยาวคือถ้าคุณไม่เปลี่ยนส่วนหัวและเปลี่ยนเพียง C/C++ เดียว ไม่ว่าจะอยู่ที่ไหนในกราฟการสร้างสำหรับระบบทั้งหมดของคุณ คุณควรจะได้รับการคอมไพล์ใหม่อย่างรวดเร็วเฉพาะไฟล์นั้น + เชื่อมโยงใหม่เฉพาะไฟล์ที่ทำงานได้/ไลบรารีที่ใช้ร่วมกันที่ไฟล์วัตถุเอาต์พุตถูกสร้างขึ้น
คุณสมบัติหลักของ nix-ninja
- แยกวิเคราะห์ไฟล์ ninja.build และสร้าง derivation สำหรับแต่ละหน่วยการคอมไพล์
- จัดเก็บอินพุตและเอาต์พุตของการสร้างใน derivation แบบ content-addressed เพื่อความละเอียดในการทำงานแบบเพิ่มเติม
- มี CLI ที่เข้ากันได้กับ ninja (สามารถใช้แทนกันได้โดยตรง)
- รองรับการทำงานในเครื่องหรือภายใน Nix derivation
ความต้องการของระบบ
- Nix ที่เปิดใช้งานคุณสมบัติทดลอง:
- nix-command
- dynamic-derivations
- ca-derivations
- recursive-nix
เป้าหมายการพัฒนา
- 0.1.0: การเปิดตัวครั้งแรกที่เน้นความถูกต้อง
- 0.2.0: คุณสมบัติประสิทธิภาพหลักเพื่อให้การสร้างแบบเพิ่มเติมมีประสิทธิภาพ
การมุ่งเน้นเชิงกลยุทธ์ที่ไฟล์สร้าง Ninja
นักพัฒนาเลือกที่จะมุ่งเป้าไปที่ไฟล์สร้าง Ninja โดยเฉพาะ ซึ่งพิสูจน์แล้วว่าเป็นการตัดสินใจเชิงกลยุทธ์ การสนับสนุน Ninja ในฐานะการแสดงกราฟการสร้าง ทำให้ nix-ninja สามารถทำงานกับระบบการสร้างยอดนิยมหลายระบบเช่น CMake, meson, premake และ gn ที่สร้างไฟล์ Ninja
แนวทางนี้มีความเกี่ยวข้องเป็นพิเศษสำหรับชุมชน Nix เนื่องจาก Nix เองใช้ meson และสร้างไฟล์ Ninja การเลือกนี้ช่วยให้มีแนวทางแบบเพิ่มเติมที่สามารถระดมทุนได้เพื่อปรับปรุงประสิทธิภาพการสร้างทั่วทั้งระบบนิเวศ โดยเริ่มจากโปรเจกต์ขนาดใหญ่เช่น LLVM และ Chromium ที่จะได้รับประโยชน์มากที่สุดจากการคอมไพล์แบบเพิ่มเติม
ในขณะที่ nix-ninja ยังคงพัฒนาต่อไปสู่เป้าหมาย 0.1.0 ที่มุ่งเน้นความถูกต้องและการเปิดตัว 0.2.0 ต่อมาที่มีเป้าหมายด้านฟีเจอร์ประสิทธิภาพ โปรเจกต์นี้เป็นก้าวที่มีแนวโน้มดีในการทำให้การสร้าง Nix มีประสิทธิภาพมากขึ้นโดยไม่จำเป็นต้องเขียนระบบการสร้างที่มีอยู่ใหม่ทั้งหมด สำหรับนักพัฒนาที่ทำงานกับฐานโค้ดที่ซับซ้อน เครื่องมือนี้อาจช่วยปรับปรุงผลผลิตอย่างมีนัยสำคัญโดยลดเวลาในการคอมไพล์และให้การเพิ่มเติมที่ละเอียดยิ่งขึ้นผ่าน content-addressed derivations ของ Nix
อ้างอิง: nix-ninja