- Luau คือ ภาษา scripting แบบฝังตัวที่รองรับ gradual typing ซึ่งรวดเร็วและปลอดภัย โดยแตกแขนงมาจาก Lua 5.1
- พัฒนาต่อยอดด้าน ประสิทธิภาพ เครื่องมือภาษา และระบบชนิดข้อมูล เพื่อรองรับเกมที่ซับซ้อนและโค้ดเบสขนาดใหญ่บนแพลตฟอร์ม Roblox
- ต่างจาก Lua ปกติ ตรงที่มี ความสามารถด้าน sandboxing และถูกออกแบบมาเพื่อให้โค้ดที่มีสิทธิ์ต่างกันสามารถรันควบคู่กันได้
- ไวยากรณ์เข้ากันได้กับ Lua 5.1 แต่มี ส่วนขยายไวยากรณ์เพิ่มเติม และ เครื่องมือวิเคราะห์ (linter, type checker) เพื่อยกระดับคุณภาพโค้ด
- ด้วยการปรับแต่งประสิทธิภาพ ไบต์โค้ดแบบปรับแต่งเอง และการรองรับ JIT ทำให้ตั้งเป้าความเร็วในการรันระดับ LuaJIT และมีศักยภาพสำหรับการใช้งานในสภาพแวดล้อมแบบฝังตัวที่หลากหลายนอกเหนือจาก Roblox
Motivation (ที่มาและแรงจูงใจ)
- ราวปี 2006 Roblox ได้นำ Lua 5.1 มาใช้เป็นภาษา scripting สำหรับเกม
- เมื่อเวลาผ่านไป ระดับความซับซ้อนของเกมบน แพลตฟอร์ม Roblox สูงขึ้นและขนาดทีมใหญ่ขึ้น จึงมีการปรับปรุงทั้งตัวภาษาและ implementation อย่างมากเพื่อก้าวข้ามข้อจำกัดของ Lua เดิม
- ตามการเติบโตของแพลตฟอร์ม มีการลงทุนอย่างมากในด้านการปรับแต่งประสิทธิภาพ ความเป็นมิตรต่อผู้ใช้ และการพัฒนาเครื่องมือที่เกี่ยวข้องกับภาษา
- โดยเฉพาะเมื่อถึงปี 2020 การดูแล โค้ดเบสขนาดใหญ่ ที่มีมากกว่า 1 ล้านบรรทัด ทำให้ตระหนักว่าการนำระบบ gradual typing มาใช้เป็นสิ่งจำเป็น
- จากความต้องการเหล่านี้ Roblox จึงพัฒนา Luau ซึ่งเป็นภาษาที่แตกแขนงจาก Lua โดยมีคุณสมบัติทั้งเร็ว เล็ก ปลอดภัย และสามารถค่อย ๆ นำ type มาใช้ได้
- รายละเอียดเพิ่มเติมมีอยู่ในเอกสาร Why Luau
ภาพรวมของ Luau
- Luau คือ ภาษา scripting แบบฝังตัว ที่อิงกับ Lua 5.1
- ให้ runtime ที่รวดเร็วและน้ำหนักเบา
- รองรับระบบ gradual typing ทำให้สามารถทำ การวิเคราะห์ทั้งแบบ dynamic และ static ควบคู่กันได้
- ผสานรวมอยู่ใน Roblox Studio และสามารถเปิด strict mode ได้ด้วยแฟล็ก
--!strict - นักพัฒนาสามารถดูเอกสารที่เชื่อมโยงกับ Roblox ได้ที่ Luau Creator Docs
Sandboxing (ความสามารถด้านแซนด์บ็อกซ์)
- Luau จำกัด standard library ที่เปิดให้ใช้งาน และมี ความสามารถด้าน sandboxing เพิ่มเติม
- ทำให้สามารถรัน โค้ดที่ไม่มีสิทธิ์พิเศษซึ่งเขียนโดยนักพัฒนาทั่วไป และ โค้ดสิทธิ์พิเศษภายในแพลตฟอร์ม แบบขนานกันได้อย่างปลอดภัย
- ด้วยเหตุนี้ สภาพแวดล้อมการรันจึงแตกต่างจาก Lua ปกติ
- ดูรายละเอียดได้ใน คำอธิบาย Sandbox
Compatibility (ความเข้ากันได้)
- พยายามคง ความเข้ากันได้ย้อนหลังกับ Lua 5.1 ให้มากที่สุด และนำความสามารถบางส่วนจากเวอร์ชันหลังจากนั้นมาด้วย
- อย่างไรก็ตาม Luau ไม่ได้รับทุกการตัดสินใจด้านการออกแบบของ Lua มาใช้ทั้งหมด แต่สะท้อนกรณีการใช้งานและข้อจำกัดเฉพาะของ Roblox
- สถานะการรองรับฟีเจอร์จาก Lua เวอร์ชันหลัง 5.1 ดูได้ใน เอกสาร Compatibility
Syntax (ไวยากรณ์)
- เข้ากันได้เต็มรูปแบบกับไวยากรณ์ของ Lua 5.1
- เพิ่มเติมด้วย ส่วนขยายไวยากรณ์ที่ทันสมัยและคุ้นเคย เพื่อเพิ่มความสะดวกในการพัฒนา
- ดูไวยากรณ์ทั้งหมดได้ใน เอกสาร Syntax
Analysis (เครื่องมือวิเคราะห์)
-
มี เครื่องมือวิเคราะห์สคริปต์ เพื่อช่วยให้เขียนโค้ดได้ถูกต้อง
-
องค์ประกอบได้แก่:
- Linter: ตรวจจับข้อผิดพลาดทั่วไป
- Type Checker: ตรวจสอบชนิดข้อมูล
-
สามารถรันได้ด้วยเครื่องมือ CLI
luau-analyze -
กฎการ lint ดูได้ที่ เอกสาร Lint และแนวทางการตรวจ type ดูได้ที่ เอกสาร Typecheck
Performance (ประสิทธิภาพ)
- มีทั้ง ฟรอนต์เอนด์แบบกำหนดเอง ที่รวม parser, linter และ type checker ไว้ด้วยกัน รวมถึง ไบต์โค้ด อินเทอร์พรีเตอร์ และคอมไพเลอร์ที่ปรับแต่งมาแล้ว
- ในบางกรณีให้ประสิทธิภาพที่สามารถแข่งขันกับอินเทอร์พรีเตอร์ LuaJIT ได้
- รองรับ คอมไพเลอร์ JIT แบบเขียนเอง บนแพลตฟอร์ม x64 และ ARM64 ซึ่งสามารถเพิ่มประสิทธิภาพให้บางโปรแกรมได้อย่างมาก
- มีการปรับแต่ง runtime อย่างต่อเนื่องและเขียนบางส่วนใหม่เพื่อเพิ่มประสิทธิภาพ
- รายละเอียดเชิงลึกด้านประสิทธิภาพมีอยู่ใน เอกสาร Performance
Libraries (ไลบรารี)
- ตัวภาษาเองเป็น superset แบบสมบูรณ์ของ Lua 5.1
- ใน standard library มีการนำบางฟังก์ชันออก และเพิ่มฟังก์ชันใหม่บางส่วน
- เมื่อนำไปฝังในแอปพลิเคชัน ก็สามารถเข้าถึง ไลบรารีส่วนขยายเฉพาะแอป ได้ด้วย
- ดูเอกสารไลบรารีทั้งหมดได้ใน เอกสาร Library
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
--!strictแล้วกลับพบว่าถึงจะมีการละเมิด type ชัดเจน โค้ดก็ยังรันได้โดยไม่มี error หรือ warning ใด ๆ เลย จึงรู้สึกตกใจเพราะไม่เป็นไปตามที่คาดหวังluauก็จะไม่มีการตรวจ type ถ้าในสภาพแวดล้อมแบบ embedded บังคับให้ทุกโค้ดผ่านการตรวจ type ก่อนคอมไพล์ ก็จะได้ประสบการณ์ตามที่คาดไว้คือจับ type error ได้จริง นี่เป็นการออกแบบที่หลีกเลี่ยงไม่ได้เพราะต้องย้ายโค้ด Lua 5.1 หลายล้านบรรทัดมาเป็น Luau ในคราวเดียว