เจาะประเด็น
Game Dev / Python
อีฟ ออนไลน์ เตรียมทิ้ง Python 2 หลังใช้มา 16 ปี — งานหิน 2.4 ล้านบรรทัดรออยู่
เกม MMO อายุ 20 กว่าปีที่รันบน Stackless Python 2.7 มาตั้งแต่ 2010 กำลังจะอัปเกรดครั้งใหญ่ที่สุดในรอบ 16 ปี — โค้ด 2.4 ล้านบรรทัด ที่ต้องจับตามองจริงๆ คือจุดที่ Python 2 กับ 3 ประพฤติตัวต่างกันกว่า 20,000 จุด
ทีมข่าว เอไอไทย.com
⏱ อ่าน 3 นาที
นี่ไม่ใช่แค่เรื่อง "อัปเดตเวอร์ชันภาษา" แต่คือการผ่าตัดหัวใจเกมที่รันต่อเนื่องมา 20 ปี โดยที่ผู้เล่นหลายหมื่นคนยังเล่นอยู่ข้างบนนั้น — พลาดทีเดียวเกมล่มทั้งจักรวาลได้เลย
เรื่องนี้มันไม่ได้เล็กๆ นะเว้ย เพื่อน พูดตรงๆ เลยว่า EVE Online เป็นหนึ่งในเคสศึกษาที่น่าสนใจที่สุดของโลก Python ในระดับโปรดักชันจริงๆ มายาวนานกว่าสองทศวรรษแล้ว พวกเขารันบน Stackless Python ตั้งแต่เปิดตัวเกมในปี 2003 และการอัปเกรดครั้งใหญ่ครั้งสุดท้ายคือการขยับไป Stackless Python 2.7 ในปี 2010 — นั่นคือ 16 ปีที่แล้ว ถ้าจะให้เทียบกับโลกคนทั่วไปก็คือตอนนั้นไอโฟนเพิ่งออกมาได้ 3 ปี แอนดรอยด์เพิ่งเริ่มมี และ "โควิด" ยังไม่มีใครรู้จัก
แล้วตอนนี้พวกเขาตัดสินใจลุยแล้ว — การย้ายไป Python 3 จะเริ่มต้นด้วยการใช้สคริปต์ชื่อ futurize รันกับโค้ด 2.4 ล้านบรรทัด ตามด้วยการรีวิวด้วยมือมนุษย์อย่างละเอียดในจุดที่พฤติกรรมของ Python 2 กับ Python 3 ต่างกันประมาณ 20,000 จุด ฟังแล้วอาจจะงงว่ามันต่างกันยังไง? ขอยกตัวอย่างที่เห็นภาพที่สุดเลย — ใน Python 2 การคำนวณ 1 / 2 จะได้ผลลัพธ์เป็น 0 เพราะมันปัดเศษทิ้ง (integer division) แต่ใน Python 3 มันจะได้ 0.5 แบบทศนิยมเต็มรูปแบบ ลองคิดดูว่าในเกมที่มีระบบเศรษฐกิจซับซ้อนระดับที่นักเศรษฐศาสตร์ต้องมาศึกษาเป็นกรณีศึกษา การที่ตัวเลขคำนวณเพี้ยนไปครึ่งหน่วยทั้งเกมจะพังขนาดไหน
สิ่งที่ประกาศออกมาไม่ได้พูดถึงเลยคือแผนการจัดการกับ Stackless Python — เพราะ Stackless มันไม่ใช่แค่ "ตัวแปลภาษา" ธรรมดา แต่มันคือสิ่งที่ทำให้ EVE Online รันผู้เล่นหลายพันคนบนเซิร์ฟเวอร์เดียวกันได้โดยไม่ระเบิด มันเป็นสถาปัตยกรรมเฉพาะที่ CCP Games (ผู้พัฒนา) สร้างและปรับแต่งมาหลายปี การจะทิ้งของที่ใช้มานานขนาดนี้ไปโดยไม่มีแผนทดแทนที่ชัดเจน มันไม่ใช่เรื่องที่ทำกันง่ายๆ แน่นอน
แต่ที่งานประชุมของพวกเขาเมื่อปีที่แล้ว มีการนำเสนอที่น่าสนใจมากชื่อว่า "Scheduling in Carbon: Leaving Stackless Python Behind" — ในงานนี้พวกเขาอธิบายวิธีการแทนที่ Stackless ในเอนจิน Carbon สำหรับเกมใหม่ล่าสุดอย่าง EVE Frontier โดยใช้ไลบรารี carbonengine/scheduler ที่ตอนนี้เปิดเป็นโอเพนซอร์สแล้ว นี่คือสัญญาณว่า CCP ไม่ได้นั่งเฉยๆ พวกเขามีแผนสำรองอยู่ในลิ้นชักมานานแล้ว และการประกาศครั้งนี้ก็ไม่ใช่การตัดสินใจแบบมึนๆ แต่คือการค่อยๆ ขยับไปสู่เป้าหมายใหญ่
ตรงนี้แหละที่ผมอยากฟันธง — การที่เกมอายุ 20 กว่าปียอมลงทุนกับการย้ายภาษาโปรแกรมมิ่งหลักทั้งตัว มันไม่ใช่แค่เรื่อง "ตามเทรนด์" หรือ "ไม่อยากตกยุค" แต่มันคือการตัดสินใจทางวิศวกรรมที่กล้าหาญมาก เพราะความเสี่ยงมันสูงสุดขีด โค้ด 2.4 ล้านบรรทัดที่เขียนและแก้กันมาหลายชั่วอายุคน (มีคนในทีมที่เขียนโค้ดยุคแรกๆ ไปทำงานที่อื่นแล้วก็มี) การจะไล่รีวิว 20,000 จุดที่พฤติกรรมต่างกันด้วยมือมนุษย์ — นี่มันคือฝันร้ายของโปรแกรมเมอร์ทุกคน แต่ถ้าทำสำเร็จ มันจะเป็นการยืดอายุเกมออกไปอีกหลายสิบปี และทำให้ทีมพัฒนาไม่ต้องติดอยู่ในวังวนของเทคโนโลยีที่ไม่มีใครดูแลแล้ว
และที่สำคัญที่สุด — การที่พวกเขาเปิดซอร์ส carbonengine/scheduler ออกมา นั่นหมายความว่าวงการเกมโดยรวมจะได้อะไรจากการเรียนรู้ของ CCP ด้วย นี่คือสิ่งที่วงการ dev ทั่วโลกควรจับตาดู เพราะถ้าเกม MMO ที่ซับซ้อนที่สุดเกมหนึ่งในประวัติศาสตร์ย้ายผ่านไปได้ นั่นคือบทพิสูจน์ว่าไม่มีอะไร "แก่เกินย้าย" จริงๆ
ฟังนะเพื่อน — การย้าย Python 3 ครั้งนี้คือการพนันครั้งใหญ่ที่สุดของ CCP Games ในรอบหลายปี แต่ถ้าดูจากแผนที่พวกเขาวางไว้ (รวมถึงการเตรียม Carbon ไว้ล่วงหน้า) ผมว่าพวกเขารู้ว่ากำลังทำอะไรอยู่ ขอแค่ให้ 20,000 จุดนั้นไม่พลาดแม้แต่จุดเดียว แล้ว EVE Online จะอยู่ไปอีก 20 ปีได้สบายๆ — แต่นี่คือ EVE นะ เกมที่ผู้เล่นทรยศกันเป็นเรื่องปกติ ขอแค่อย่าให้บั๊กจาก Python 3 มามันเป็นตัวทรยศทีม dev เองก็พอ
ที่มา: Simon Willison's Weblog — อ่านต้นฉบับ
ความคิดเห็น 3
กำลังโหลดความคิดเห็น...