นักพัฒนาเดี่ยวได้เปิดตัว Kefir คอมไพเลอร์ C17/C23 อิสระที่แสดงให้เห็นความสามารถทางเทคนิคที่น่าประทับใจ แต่ต้องเผชิญกับอุปสรรคด้านประสิทธิภาพที่สำคัญ โครงการนี้เป็นตัวแทนของความสำเร็จที่หายากในการพัฒนาคอมไพเลอร์ ซึ่งบุคคลเดียวได้สร้าง toolchain ที่สมบูรณ์ตั้งแต่เริ่มต้นโดยไม่มี framework ภายนอกหรือการสนับสนุนจากสถาบัน
ข้อมูลจำเพาะของคอมไพเลอร์ Kefir :
- การรองรับมาตรฐาน: C17/C23 พร้อมส่วนขยาย GNU C
- แพลตฟอร์มเป้าหมาย: Linux (glibc & musl), FreeBSD, OpenBSD, NetBSD
- สถาปัตยกรรม: x86_64 พร้อม System-V ABI
- ขนาดโค้ด: 144k บรรทัด (260k รวมการทดสอบ)
- ใบอนุญาต: GNU GPLv3 สำหรับคอมไพเลอร์, BSD-3 สำหรับ runtime
- การรองรับการดีบัก: ข้อมูลดีบัก DWARF-5
- คุณสมบัติการเพิ่มประสิทธิภาพ: SSA-based IR, mem2reg, constant folding, dead code elimination, function inlining
ความสำเร็จทางเทคนิคพบกับการตรวจสอบความเป็นจริง
คอมไพเลอร์ดังกล่าวใช้มาตรฐาน C สมัยใหม่พร้อมฟีเจอร์ต่างๆ เช่น การปรับปรุงประสิทธิภาพแบบ SSA การรองรับการ debug แบบ DWARF-5 และการสร้างโค้ดแบบ position-independent มันสามารถคอมไพล์โครงการ open-source ขนาดใหญ่ได้สำเร็จ รวมถึง GNU coreutils, Git, Nginx และ PostgreSQL อย่างไรก็ตาม นักพัฒนาได้ยอมรับอย่างเปิดเผยถึงปัญหาความเร็วในการคอมไพล์ที่ร้ายแรง ซึ่งทำให้ไม่สามารถใช้งานได้จริงในหลายกรณี
ปัญหาด้านประสิทธิภาพเกิดจากการตัดสินใจเชิงสถาปัตยกรรมที่ทำระหว่างการพัฒนา คอมไพเลอร์ยังคงรักษา intermediate representation แบบ stack-based แบบเก่าที่ถูกแปลงเป็นรูปแบบ SSA ซึ่งสร้าง overhead ที่ไม่จำเป็น นอกจากนี้ codebase ยังมีอัลกอริทึมที่ไม่ได้รับการปรับปรุงประสิทธิภาพและ abstraction ที่ซับซ้อนเกินไป ซึ่งให้ความสำคัญกับความเร็วในการพัฒนามากกว่าประสิทธิภาพในการทำงาน
SSA (Static Single Assignment) เป็นรูปแบบหนึ่งของ intermediate representation ที่ใช้ในคอมไพเลอร์ ซึ่งตัวแปรแต่ละตัวจะถูกกำหนดค่าเพียงครั้งเดียว ทำให้การปรับปรุงประสิทธิภาพทำได้ง่ายขึ้น
ปัญหาด้านประสิทธิภาพที่ทราบแล้ว:
- ความเร็วในการคอมไพล์: นักพัฒนาอธิบายว่า "แย่มาก"
- สถาปัตยกรรม: Legacy stack-based IR ที่แปลงเป็น SSA สร้างภาระเพิ่มเติม
- การใช้หน่วยความจำ: มีปัญหากับอาร์เรย์ขนาดใหญ่ (ขัดข้องเมื่อใช้อาร์เรย์ 10 ล้านองค์ประกอบ)
- การสร้างโค้ด: ดีกว่า TCC แต่ช้ากว่า GCC/Clang อย่างมีนัยสำคัญ
- การปรับให้เหมาะสม: มีอัลกอริทึม O(n²) และเส้นทางโค้ดที่ไม่ได้ปรับให้เหมาะสม
การตอบสนองจากชุมชนและศักยภาพทางการตลาด
แม้จะมีข้อจำกัดด้านประสิทธิภาพ นักพัฒนาในชุมชนก็เห็นคุณค่าในโครงการนี้ บางคนแนะนำว่าอาจจะดึงดูดองค์กรที่เน้นความปลอดภัยซึ่งต้องการควบคุม software supply chain ทั้งหมดของตน หรือนักพัฒนาที่ต้องการคอมไพเลอร์ทางเลือกที่คาดเดาได้และเข้าใจง่ายกว่า toolchain หลักที่มีอำนาจเหนือ
อาจจะมีความสนใจจริงๆ ในคอมไพเลอร์นี้จากบุคคล/บริษัทที่ให้ความสำคัญกับความคาดเดาได้และความเสถียรเป็นอย่างมาก ต้องการควบคุม software supply chain ทั้งหมดของตน หรือเพียงแค่ต้องการคอมไพเลอร์ที่เร็วกว่าสำหรับ debug build ของตน
โครงการนี้ยังเผชิญกับความท้าทายในการนำไปใช้งานจริง ผู้ใช้รายงานปัญหาการติดตั้งและปัญหาความเข้ากันได้กับการกำหนดค่าระบบที่แตกต่างกัน ซึ่งเน้นย้ำถึงความซับซ้อนในการรองรับสภาพแวดล้อม Linux และ BSD ที่หลากหลาย
โปรเจกต์โอเพนซอร์สที่ได้รับการตรวจสอบแล้ว:
- GNU coreutils และ binutils
- เว็บเซิร์ฟเวอร์: Nginx
- ระบบควบคุมเวอร์ชัน: Git
- เครือข่าย: Curl , OpenSSL , OpenSSH , Wget
- ฐานข้อมูล: PostgreSQL
- ภาษาโปรแกรม: OCaml , Perl , Tcl
- สามารถ bootstrap จากคอมไพเลอร์ของโฮสต์ได้สำเร็จในทุกแพลตฟอร์มที่รองรับ
ปรัชญาการพัฒนาและแนวโน้มในอนาคต
นักพัฒนาปฏิบัติต่อ Kefir เหมือนเป็นโครงการศิลปะมากกว่าเครื่องมือสำหรับการใช้งานจริง โดยยอมรับว่าการพัฒนาแบบเต็มเวลาจะต้องมีการสนับสนุนทางการเงินโดยเฉพาะ โค้ด 144,000 บรรทัด (ไม่รวมการทดสอบ) เป็นตัวแทนของความพยายามเป็นปีๆ ของการทำงานคนเดียว แต่ผู้ดูแลยังคงมองอย่างสมจริงเกี่ยวกับข้อจำกัดปัจจุบันและตำแหน่งทางการตลาดของคอมไพเลอร์
แม้ว่า Kefir อาจจะไม่ท้าทายคอมไพเลอร์ที่มีชื่อเสียงอย่าง GCC หรือ Clang ในด้านประสิทธิภาพ แต่มันแสดงให้เห็นว่าการพัฒนาคอมไพเลอร์อิสระยังคงเป็นไปได้ โครงการนี้ทำหน้าที่เป็นทั้งความสำเร็จทางเทคนิคและการเตือนใจถึงความซับซ้อนอันมหาศาลที่เกี่ยวข้องในการสร้างเครื่องมือพัฒนาที่พร้อมสำหรับการใช้งานจริง
อ้างอิง: Kefir: solo-developed full C17/C23 compiler with extensive validation