คอมไพเลอร์ C ของนักพัฒนาเดี่ยวแสดงศักยภาพแม้จะมีปัญหาด้านประสิทธิภาพ

ทีมชุมชน BigGo
คอมไพเลอร์ C ของนักพัฒนาเดี่ยวแสดงศักยภาพแม้จะมีปัญหาด้านประสิทธิภาพ

นักพัฒนาเดี่ยวได้เปิดตัว 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