ไลบรารี Lua ECS ใหม่ " Evolved-LUN " จุดประกายการถกเถียงเรื่องประสิทธิภาพเกี่ยวกับการใช้งาน Structure of Arrays

BigGo Editorial Team
ไลบรารี Lua ECS ใหม่ " Evolved-LUN " จุดประกายการถกเถียงเรื่องประสิทธิภาพเกี่ยวกับการใช้งาน Structure of Arrays

ไลบรารี Entity Component System (ECS) ใหม่สำหรับ Lua ที่ชื่อ evolved-lun ได้ปรากฏตัวขึ้นในชุมชนนักพัฒนาเกม โดยวางตำแหน่งตัวเองเป็นทางเลือกที่เน้นประสิทธิภาพแทนโซลูชันที่มีอยู่เดิม ไลบรารีนี้มีเป้าหมายที่จะให้นักพัฒนาเว็บได้ใช้แนวคิดการพัฒนาที่ทันสมัย ขณะเดียวกันก็รักษาความยืดหยุ่นสำหรับแอปพลิเคชันที่ซับซ้อนผ่านการรวม WebAssembly และการสนับสนุน multi-threading

คุณสมบัติหลักของไลบรารี:

  • การจัดเก็บคอมโพเนนต์แบบ Structure of Arrays (SoA) เพื่อประสิทธิภาพ
  • การรวม WebAssembly สำหรับการแปลงข้อมูล
  • รองรับ Multi-threading สำหรับการประมวลผลแบบขนาน
  • การคำนวณวิวัฒนาการแบบเพิ่มหน่วย
  • รองรับการจัดการสถานะแบบ immutable, mutable หรือแบบผสม
  • React hooks สำหรับการเรนเดอร์ entities และ fragments

การอ้างสิทธิ์เรื่องประสิทธิภาพอยู่ภายใต้การตรวจสอบของชุมชน

คำสัญญาหลักเรื่องประสิทธิภาพของไลบรารีนี้มุ่งเน้นไปที่การใช้งาน Structure of Arrays (SoA) สำหรับการเก็บ component วิธีการนี้เก็บ component ในอาร์เรย์ที่ต่อเนื่องกัน ซึ่งในทางทฤษฎีจะช่วยให้การวนซ้ำและการประมวลผลเร็วขึ้น อย่างไรก็ตาม ชุมชนได้ตั้งคำถามสำคัญเกี่ยวกับว่าประโยชน์เหล่านี้จะเกิดขึ้นจริงใน runtime environment ของ Lua หรือไม่

ข้อกังวลหลักเกี่ยวข้องกับ memory model ของ Lua เนื่องจากองค์ประกอบของอาร์เรย์ใน Lua มักจะเป็น pointer ไปยัง object ที่จัดสรรใน heap นักพัฒนาจึงตั้งคำถามว่าวิธีการ SoA จะให้ประโยชน์ด้านประสิทธิภาพที่มีความหมายหรือไม่ เมื่อระบบยังคงต้องติดตาม pointer เพื่อเข้าถึงค่าจริง การถกเถียงทางเทคนิคนี้เน้นย้ำถึงความท้าทายพื้นฐานในการปรับปรุง data structure สำหรับ interpreted language

สมาชิกชุมชนหลายคนได้ให้ข้อโต้แย้ง โดยชี้ให้เห็นว่า LuaJIT สามารถได้รับประโยชน์จากการจัดระเบียบ SoA ได้จริง พวกเขาชี้ให้เห็นว่า Lua ใช้ tagged union สำหรับการเก็บ primitive ซึ่งช่วยให้ค่าบางค่าสามารถเก็บไว้ inline ภายในตารางได้ นอกจากนี้ แม้จะมี pointer indirection แต่ SoA ก็สามารถลดการจัดสรรหน่วยความจำและแรงกดดัน garbage collection ได้

ข้อกังวลเรื่องความโปร่งใสของ Benchmark

ช่องว่างที่น่าสังเกตในการนำเสนอไลบรารีคือการขาดหายไปของ comparative benchmark ที่เผยแพร่ เมื่อถูกถามเกี่ยวกับการอ้างสิทธิ์ด้านประสิทธิภาพ ผู้เขียนไลบรารียอมรับว่ามี benchmark ภายในแต่ยอมรับว่าไม่ได้ออกแบบมาสำหรับการประเมินภายนอกหรือการเปรียบเทียบกับไลบรารี ECS อื่น ๆ

Comparative benchmark เป็นงานใหญ่ในตัวของมันเอง และโดยปกติแล้วไลบรารีของผู้เขียนจะชนะในนั้น

การยอมรับอย่างซื่อสัตย์นี้สะท้อนถึงความท้าทายทั่วไปในระบบนิเวศ open-source ที่การอ้างสิทธิ์ด้านประสิทธิภาพมักขาดการตรวจสอบอิสระ คำขอของชุมชนสำหรับ benchmark ที่เป็นรูปธรรมเน้นย้ำถึงความสำคัญของการประเมินประสิทธิภาพอย่างโปร่งใสในไลบรารีทางเทคนิค

ทางเลือก Lua ECS ที่กล่าวถึง:

  • tiny-ecs: ไลบรารีที่มีชื่อเสียงและเป็นที่ยอมรับ (https://bakpakin.github.io/tiny-ecs/doc/)
  • JECS: ทางเลือกใหม่ที่มาพร้อมกับแนวคิด chunk-based (https://github.com/Ukendio/jecs)
  • evolved-lun: รายการใหม่ที่มาพร้อมเอกสารประกอบที่ครบถ้วนและฟีเจอร์ scheduler

การแข่งขันในพื้นที่ Lua ECS

ไลบรารีนี้เข้าสู่ตลาดที่มีทางเลือกที่มีชื่อเสียงอยู่แล้ว เช่น tiny-ecs และไลบรารี JECS ที่ใหม่กว่า สมาชิกชุมชนที่คุ้นเคยกับทางเลือกเหล่านี้ได้สังเกตเห็นความคล้ายคลึงกันในแนวคิดหลัก โดยเฉพาะอย่างยิ่งเกี่ยวกับการประมวลผลแบบ chunk-based อย่างไรก็ตาม evolved-lun แยกความแตกต่างของตัวเองผ่านเอกสารที่ครอบคลุมมากขึ้นและฟังก์ชัน scheduler ที่มีมาให้

แรงจูงใจของผู้เขียนในการสร้างไลบรารี ECS อีกตัวหนึ่งเกิดจากโซลูชันที่มีอยู่ไม่ค่อยตรงกับความต้องการเฉพาะของพวกเขา ซึ่งเป็นแรงผลักดันทั่วไปสำหรับโปรเจกต์ open-source ใหม่ ๆ สิ่งนี้เน้นย้ำว่าความต้องการเฉพาะทางมักนำไปสู่การกระจายตัวของระบบนิเวศมากกว่าการรวมตัวรอบโซลูชันเดียว

ไลบรารียังคงอยู่ในช่วงเริ่มต้นโดยยังไม่มีโปรเจกต์ที่เผยแพร่ใช้งาน แม้ว่าผู้เขียนจะวางแผนที่จะแสดงให้เห็นในโปรเจกต์ส่วนตัวที่กำลังจะมาถึง ในตอนนี้ ชุมชนนักพัฒนาเกม Lua ยังคงประเมินว่าประโยชน์ด้านประสิทธิภาพที่ evolved-lun สัญญาไว้จะสมควรแก่การนำมาใช้แทนทางเลือกที่มีชื่อเสียงหรือไม่

อ้างอิง: evolved-lun [work in progress]