ปัญหาของการทำอิมพลีเมนเทชันทางเลือก (Alternative Implementation Problem)
(pointersgonewild.com)ปัญหาของอิมพลีเมนเทชันทางเลือก
ผู้เขียนพูดถึงปัญหาของการทำอิมพลีเมนเทชันทางเลือกที่เกิดขึ้นซ้ำ ๆ ในโลกซอฟต์แวร์ โดยประสบการณ์ของผู้เขียนส่วนใหญ่อยู่กับการปรับแต่งภาษาการเขียนโปรแกรมแบบไดนามิกไทป์ให้มีประสิทธิภาพสูงขึ้น
- โปรเจกต์ PyPy ได้พัฒนา JIT compiler ขั้นสูงสำหรับ Python แต่ในความเป็นจริงกลับแทบไม่มีการใช้งาน เนื่องจาก Python เพิ่มฟีเจอร์ใหม่ ๆ อย่างต่อเนื่องและเปลี่ยนแปลงอยู่เสมอ ทำให้ PyPy ตามไม่ทัน
- LuaJIT ได้รับการยกย่องอย่างมาก แต่เมื่อภาษา Lua เพิ่มฟีเจอร์ใหม่อย่างต่อเนื่อง LuaJIT จึงตกตามหลังอยู่หลายเวอร์ชัน
- TruffleRuby JIT มีประสิทธิภาพที่น่าประทับใจที่สุด แต่มีข้อจำกัดด้านความเข้ากันได้ของฟีเจอร์เมื่อเทียบกับ CRuby จึงถูกนำไปใช้งานอย่างจำกัด
บทเรียน: อิมพลีเมนเทชันทางเลือกเป็นทางเลือกที่มีแนวโน้มจะล้มเหลว
- เมื่อสร้างอิมพลีเมนเทชันทางเลือก ก็หลีกเลี่ยงไม่ได้ที่จะต้องขึ้นอยู่กับการเปลี่ยนแปลงของอิมพลีเมนเทชันหลัก
- อิมพลีเมนเทชันหลักเป็นฝ่ายควบคุมทิศทางของโปรเจกต์ ส่วนอิมพลีเมนเทชันทางเลือกทำได้เพียงวิ่งตาม
- โดยทั่วไปเมื่อสร้างอิมพลีเมนเทชัน JIT สำหรับภาษาแบบอินเทอร์พรีเตอร์ การเพิ่มฟีเจอร์ใหม่เข้าไปในอินเทอร์พรีเตอร์มักทำได้เร็วกว่ามาก จึงทำให้อิมพลีเมนเทชันหลักอาจแซงหน้า JIT ไปได้
YJIT: การทำ Ruby JIT compiler ภายใน CRuby
- YJIT ก็เป็น Ruby JIT อีกตัวหนึ่ง แต่เลือกที่จะพัฒนาไว้ภายในตัว CRuby เอง
- ด้วยแนวทางนี้ YJIT จึงสามารถเข้ากันได้กับทุกฟีเจอร์ของ CRuby แบบ 100% ตั้งแต่ต้น
- ปัจจุบันมันได้กลายเป็น JIT อย่างเป็นทางการของ Ruby และถูกนำไปใช้งานที่ Shopify, Discourse, GitHub และที่อื่น ๆ
บทเรียนในมุมมองที่กว้างขึ้น
- ภาษา Crystal ซึ่งคล้ายกับภาษาเดิมแต่ไม่เข้ากันได้ ก็ประสบความสำเร็จได้อย่างจำกัดเช่นกัน
- สิ่งที่ดูคล้ายกับภาษาเดิมแต่ไม่เข้ากันได้จริง มีแต่จะทำให้ผู้คนสับสน
- เมื่อต้องสร้างภาษาโปรแกรมใหม่ ไม่ควรพยายามเป็นเพียงส่วนย่อยของภาษาเดิม แต่ควรเดินในเส้นทางของตัวเอง
- แบบนั้นจึงจะสามารถพัฒนาไปตามจังหวะและทิศทางของตัวเองได้ โดยไม่ต้องผูกติดกับประสิทธิภาพ ฟีเจอร์ หรือไลบรารีของอิมพลีเมนเทชันอื่น
ความเห็นของ GN⁺
- ปัญหาเรื่อง “อิมพลีเมนเทชันทางเลือก” ที่อธิบายในบทความนี้ เป็นสิ่งที่ควรระวังไม่ใช่แค่กับภาษาโปรแกรม แต่รวมถึงการสร้างซอฟต์แวร์และระบบฮาร์ดแวร์หลากหลายประเภทด้วย
- หากให้ความสำคัญกับเสถียรภาพและความเข้ากันได้เพียงอย่างเดียว ก็อาจทำให้นวัตกรรมเกิดขึ้นได้ยาก อย่างไรก็ตาม ในมุมมองของผู้ใช้จริง ความเข้ากันได้ก็เป็นปัจจัยที่สำคัญมาก จึงต้องหาสมดุลระหว่างเทคโนโลยีใหม่กับความเป็นมิตรต่อผู้ใช้
- ในมุมมองระยะยาว จำเป็นต้องคิดให้รอบคอบว่าโปรเจกต์ใหม่ที่สร้างขึ้นจะ “เข้ากันได้กับใคร” และ “จะพัฒนาไปในทิศทางใด”
- เมื่อต้องสร้างภาษาโปรแกรมใหม่ การทำให้แค่ไวยากรณ์คล้ายภาษาเดิมมีแต่จะเพิ่มความสับสน ตรงกันข้าม การมีปรัชญาและทิศทางของตัวเองอย่างชัดเจนจะเหมาะสมกว่า
- ดูเหมือนว่าการนำเสนอทางออกที่สร้างสรรค์และมีเอกลักษณ์ของตัวเอง จะมีโอกาสประสบความสำเร็จในระยะยาวมากกว่าการแข่งขันกันในตลาดเพียงอย่างเดียว
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News