โปรเจกต์ Go port ใหม่ของเกมคลาสสิก DOOM ได้จุดประกายการอภิปรายที่น่าสนใจในหมู่นักพัฒนาเกี่ยวกับตำแหน่งของ Go ในการพัฒนาเกมและการเปรียบเทียบกับภาษาโปรแกรมมิ่งอื่นๆ โปรเจกต์ที่เรียกว่า GORE นี้เป็นการแปลงเกมเอนจิ้นในตำนานจาก C เป็น Go อย่างสมบูรณ์ โดยลบการพึ่งพาแพลตฟอร์มออกไปพร้อมกับรักษาประสบการณ์การเล่นเกมแบบเดิมไว้
คุณสมบัติของโปรเจค GORE :
- ไม่ขึ้นกับแพลตฟอร์ม (รันได้ทุกที่ที่ Go รันได้)
- ไม่มีการพึ่งพา CGo
- รองรับ DOOM หลายเวอร์ชัน ( DOOM , DOOM II , Ultimate DOOM , Final DOOM )
- ปลอดภัยด้านหน่วยความจำด้วย garbage collector ของ Go
- รองรับการ cross-compilation
- ต้องการ Go 1.24+ และไฟล์ WAD
ความเหมาะสมของ Go สำหรับการพัฒนาเกม
การตอบสนองจากชุมชนเผยให้เห็นความรู้สึกที่หลากหลายแต่โดยรวมเป็นบวกเกี่ยวกับการใช้ Go สำหรับการพัฒนาเกม นักพัฒนาบางคนชื่นชมที่โปรเจกต์นี้แสดงให้เห็นทางเลือกอื่นจากแนวทาง C และ C++ แบบดั้งเดิมในการเล่นเกม การอภิปรายเน้นย้ำถึงความสามารถในการคอมไพล์ข้ามแพลตฟอร์มและฟีเจอร์ความปลอดภัยของหน่วยความจำของ Go เป็นข้อได้เปรียบที่สำคัญเหนือภาษาระดับต่ำกว่า
อย่างไรก็ตาม การสนทนายังสัมผัสถึงข้อจำกัดของ Go ในพื้นที่เกมมิ่งด้วย ภาษานี้ยังขาดไลบรารีกราฟิกและการพัฒนาเกมที่กว้างขวางเมื่อเปรียบเทียบกับระบบนิเวศที่มีการสร้างมาอย่างยาวนาน Ebitengine ที่กล่าวถึงในโปรเจกต์ดูเหมือนจะเป็นหนึ่งในเฟรมเวิร์กการพัฒนาเกมที่โดดเด่นไม่กี่ตัวที่มีให้สำหรับนักพัฒนา Go
ข้อจำกัดปัจจุบัน:
- หนึ่งอินสแตนซ์ต่อหนึ่งโปรเซสเนื่องจากตัวแปรส่วนกลาง
- ค่าคงที่ที่ส่งออกแบบสุ่มจากการแปลง C
- API ภายนอกที่จำกัดสำหรับการตรวจสอบสถานะ
- ยังคงมีบล็อกโค้ดที่ไม่ปลอดภัยบางส่วน
- การรองรับอินพุตที่จำกัดในเวอร์ชันเทอร์มินัล
การเปรียบเทียบภาษาและปรัชญาการออกแบบ
การถกเถียงที่ร้อนแรงเป็นพิเศษเกิดขึ้นเกี่ยวกับการเปรียบเทียบ Go กับ Python โดยนักพัฒนาอภิปรายว่า Go สามารถถือได้ว่าเป็น Python 4.0 หรือไม่ ชุมชนชี้ให้เห็นความแตกต่างพื้นฐานระหว่างภาษาทั้งสอง - ลักษณะที่คอมไพล์แล้วของ Go เทียบกับแนวทางแปลผลของ Python และการมุ่งเน้นของ Go ในเรื่อง concurrency เทียบกับการเน้นของ Python ในเรื่องความง่ายในการใช้งาน
Go มุ่งเน้นที่ concurrency ส่วน Python มุ่งเน้นที่การทำให้การเขียนโค้ดเป็นเรื่องง่าย หลายสิ่งที่เป็น one-liner ใน Python ใน Go ต้องใช้หลายบรรทัดหรือ boilerplate มาก
การอภิปรายเผยให้เห็นว่าแม้ Go จะเสนอความยืดหยุ่นของ structural typing ที่คล้ายกับภาษาสคริปต์ แต่ก็ต้องการโค้ดที่ verbose มากกว่าสำหรับงานที่ภาษาอื่นจัดการได้อย่างกระชับมากกว่า
การใช้งานทางเทคนิคและข้อจำกัด
โปรเจกต์ GORE แสดงให้เห็นทั้งจุดแข็งและข้อจำกัดปัจจุบันของ Go การ port นี้ขจัด CGo dependencies และโค้ดเฉพาะแพลตฟอร์มได้สำเร็จ ทำให้เป็น cross-platform อย่างแท้จริง อย่างไรก็ตาม นักพัฒนาสังเกตเห็นความท้าทายที่เหลืออยู่หลายประการ รวมถึงการมีอยู่ของตัวแปรโกลบอลที่ป้องกันไม่ให้มีหลาย game instance และบล็อกโค้ด unsafe ที่เหลืออยู่บางส่วน
แนวทางของโปรเจกต์ในการแปลงโค้ด C เป็น Go แล้วทำความสะอาดด้วยตนเองเป็นจุดกึ่งกลางที่น่าสนใจระหว่างการแปลงอัตโนมัติและการเขียนใหม่ทั้งหมด วิธีการนี้รักษาโครงสร้างของเกมต้นฉบับไว้ในขณะที่ทำให้เข้ากับสไตล์การเขียนโปรแกรมของ Go มากขึ้น
การอภิปรายของชุมชนชี้ให้เห็นว่าแม้ Go อาจไม่ใช่ตัวเลือกแรกสำหรับการพัฒนาเกม แต่โปรเจกต์อย่าง GORE แสดงให้เห็นความเป็นไปได้สำหรับแอปพลิเคชันเกมบางประเภท โดยเฉพาะอย่างยิ่งที่ให้ความสำคัญกับความเข้ากันได้ข้ามแพลตฟอร์มและความปลอดภัยของหน่วยความจำมากกว่าประสิทธิภาพแบบดิบ
อ้างอิง: GORE