ภาษาโปรแกรมมิ่ง Zig ได้ก้าวหน้าอย่างมีนัยสำคัญในการบรรลุเป้าหมายหลักประการหนึ่ง คือ เวลาในการคอมไพล์ที่เร็วขึ้น การทดสอบในโลกจริงกับโปรเจกต์ Ghostty terminal emulator แสดงให้เห็นการปรับปรุงความเร็วอย่างมากใน Zig 0.15.1 แม้ว่าการบิลด์ส่วนใหญ่ยังคงอาศัย LLVM มากกว่า self-hosted backend ของ Zig
ประสิทธิภาพของ Build Script แสดงการปรับปรุงอย่างมาก
การปรับปรุงที่โดดเด่นที่สุดมาจากการคอมไพล์ build script ซึ่งลดลงจากกว่า 7 วินาทีใน Zig 0.14 เหลือเพียง 1.7 วินาทีในเวอร์ชัน 0.15.1 นี่แสดงถึงการเพิ่มความเร็วประมาณ 76% สำหรับขั้นตอนการคอมไพล์เริ่มต้นที่ทุกการบิลด์ใหม่ต้องทำให้เสร็จสิ้น แม้ว่านักพัฒนาที่ทำงานกับโปรเจกต์ที่มีอยู่แล้วอาจไม่สังเกตเห็นสิ่งนี้ในชีวิตประจำวัน แต่มันส่งผลกระทบอย่างมีนัยสำคัญต่อผู้ใช้ครั้งแรกที่บิลด์จาก source
การบิลด์แอปพลิเคชันแบบเต็มเห็นการลดลงที่มีความหมาย
การบิลด์ Ghostty แบบสมบูรณ์ปรับปรุงจาก 41 วินาทีเป็น 32 วินาที ซึ่งเป็นการลดลง 22% ของเวลาบิลด์ทั้งหมด การอภิปรายในชุมชนเผยให้เห็นความคิดเห็นที่หลากหลายเกี่ยวกับว่าการปรับปรุงดังกล่าวมีความสำคัญในทางปฏิบัติหรือไม่ นักพัฒนาบางคนโต้แย้งว่าเวลาการคอมไพล์นั้นเล็กน้อยเมื่อเทียบกับเวลาที่ใช้ในการเขียนและใคร่ครวญเกี่ยวกับโค้ด ในขณะที่คนอื่นๆ เน้นย้ำว่ารอบการทำซ้ำที่เร็วขึ้นช่วยเพิ่มประสิทธิภาพและรักษาสถานะการไหลระหว่างการพัฒนา
ความล่าช้าใดๆ ระหว่างการเขียนโค้ดและการเห็นผลลัพธ์คือพื้นที่ว่างในใจของฉันที่สิ่งรบกวนสามารถเข้ามาได้
การเปรียบเทียบเวลาในการ Build ระหว่าง Zig 0.14 และ 0.15.1
ประเภทการ Build | Zig 0.14 | Zig 0.15.1 | การปรับปรุง |
---|---|---|---|
การคอมไพล์ Build Script | 7วินาที 167มิลลิวินาที | 1วินาที 702มิลลิวินาที | เร็วขึ้น ~76% |
การ Build Ghostty Binary แบบเต็มรูปแบบ (ไม่มี Cache) | 41วินาที | 32วินาที | เร็วขึ้น 22% |
การ Build แบบ Incremental ( Ghostty Executable ) | 19วินาที | 16วินาที | เร็วขึ้น 16% |
การ Build แบบ Incremental ( libghostty-vt ) | 2วินาที 884มิลลิวินาที | 975มิลลิวินาที | เร็วขึ้น 66% |
หมายเหตุ: libghostty-vt ใช้ self-hosted x86_64 backend ของ Zig ในขณะที่การ build อื่นๆ ยังคงใช้ LLVM
Self-Hosted Backend แสดงให้เห็นแนวโน้มที่ดีสำหรับการปรับปรุงในอนาคต
ผลลัพธ์ที่มีแนวโน้มดีที่สุดมาจากคอมโพเนนต์ที่สามารถใช้ self-hosted x86_64 backend ของ Zig แทน LLVM เวลาในการรีบิลด์ libghostty-vt library ลดลงจากเกือบ 3 วินาทีเหลือต่ำกว่า 1 วินาทีเมื่อใช้ native backend เวลาบิลด์ที่ต่ำกว่าหนึ่งวินาทีนี้แสดงถึงทิศทางที่ Zig กำลังมุ่งหน้าในขณะที่ self-hosted compiler ของมันเติบโตขึ้น
สมาชิกชุมชนสังเกตว่าแนวทางนี้แตกต่างจากภาษาอย่าง Rust ซึ่งบรรลุการบิลด์แบบเพิ่มทีละน้อยที่เร็วผ่านระบบแคชที่ซับซ้อน กลยุทธ์ของ Zig มุ่งเน้นไปที่การทำให้คอมไพเลอร์เองเร็วขึ้นโดยพื้นฐานมากกว่าการอาศัยการแคช build artifact เป็นหลัก
กลยุทธ์ Compiler Backend จุดประกายการอภิปรายทางเทคนิค
การอภิปรายเกี่ยวกับการใช้ LLVM เผยให้เห็นมุมมองที่กว้างขึ้นของอุตสาहกรรมเกี่ยวกับการออกแบบคอมไพเลอร์ สมาชิกชุมชนบางคนมอง LLVM เป็นกับดักที่ให้ประโยชน์ในการเริ่มต้นอย่างรวดเร็วและการปรับให้เหมาะสม แต่จำกัดความสามารถในการปรับแต่งประสิทธิภาพระยะยาว คนอื่นๆ ชี้ไปที่ตัวอย่างที่ประสบความสำเร็จอย่าง Go ซึ่งสร้าง code generation ของตัวเองตั้งแต่เริ่มต้น และ TCC (Tiny C Compiler) ซึ่งยังคงไม่มีใครเทียบได้สำหรับความเร็วในการคอมไพล์อย่างแท้จริง
การสนทนายังสัมผัสถึง backend ทางเลือกอย่าง Cranelift ที่ใช้ในโปรเจกต์ Rust บางโปรเจกต์ แม้ว่าการเปรียบเทียบประสิทธิภาพแสดงให้เห็นว่ามันมักจะผลิตโค้ดที่ช้ากว่า output ที่ปรับให้เหมาะสมของ LLVM 24% สิ่งนี้เน้นย้ำถึงการแลกเปลี่ยนระหว่างความเร็วในการคอมไพล์และประสิทธิภาพรันไทม์ที่นักออกแบบคอมไพเลอร์ต้องนำทาง
การปรับปรุงเหล่านี้ใน Zig 0.15.1 แสดงถึงเพียงจุดเริ่มต้นของการเดินทางด้านความเร็วการคอมไพล์ของภาษา เมื่อ self-hosted backend มีเสถียรภาพและฟีเจอร์การคอมไพล์แบบเพิ่มทีละน้อยเติบโต ทีมพัฒนาคาดหวังการปรับปรุงที่มากขึ้นอย่างมากในปีที่จะมาถึง
อ้างอิง: Zig Builds Are Getting Faster