โอเพ่นซอร์สสำหรับ Luau ซึ่งเป็นรูปแบบการตรวจสอบประเภทของภาษา Lua

ประกาศโอเพ่นซอร์สและการเผยแพร่ภาษาโปรแกรม Luau แบบสแตนด์อโลนรุ่นแรก การพัฒนาภาษา Lua อย่างต่อเนื่องและเข้ากันได้กับ Lua 5.1 รุ่นเก่า Luau ได้รับการออกแบบมาเพื่อการฝังกลไกการเขียนสคริปต์ลงในแอปพลิเคชันเป็นหลัก และมีเป้าหมายเพื่อให้ได้ประสิทธิภาพสูงและใช้ทรัพยากรต่ำ รหัสโครงการเขียนด้วยภาษา C++ และเปิดภายใต้ใบอนุญาต MIT

Luau ขยาย Lua ด้วยความสามารถในการตรวจสอบประเภทและโครงสร้างวากยสัมพันธ์ใหม่บางอย่าง เช่น ตัวอักษรสตริง ภาษานี้เข้ากันได้กับ Lua 5.1 แบบย้อนหลังและบางส่วนกับเวอร์ชันที่ใหม่กว่า รองรับ Lua Runtime API ซึ่งทำให้คุณสามารถใช้ Luau กับโค้ดและการผูกที่มีอยู่ได้ รันไทม์ของภาษาจะขึ้นอยู่กับโค้ด Lua runtime 5.1 ที่ได้รับการปรับปรุงใหม่อย่างหนัก แต่ล่ามจะถูกเขียนใหม่ทั้งหมด ในระหว่างการพัฒนา เทคนิคการปรับให้เหมาะสมใหม่บางอย่างถูกนำมาใช้เพื่อให้ได้ประสิทธิภาพที่สูงขึ้นเมื่อเทียบกับ Lua

โปรเจ็กต์นี้พัฒนาโดย Roblox และใช้ในโค้ดของแพลตฟอร์มเกม เกม และแอปพลิเคชันผู้ใช้ของบริษัทนี้ รวมถึงโปรแกรมแก้ไข Roblox Studio ในขั้นต้น Luau ได้รับการพัฒนาแบบปิดประตู แต่สุดท้ายก็ตัดสินใจโอนไปเป็นหมวดหมู่ของโครงการที่เปิดอยู่เพื่อการพัฒนาร่วมกันต่อไปโดยการมีส่วนร่วมของชุมชน

คุณสมบัติที่สำคัญ:

  • การพิมพ์แบบค่อยเป็นค่อยไปซึ่งครอบครองตำแหน่งกลางระหว่างการพิมพ์แบบไดนามิกและแบบคงที่ Luau อนุญาตให้คุณใช้การพิมพ์แบบคงที่ได้ตามต้องการ โดยการระบุข้อมูลประเภทผ่านคำอธิบายประกอบพิเศษ มีประเภทบิวท์อินคือ "any", "nil", "boolean", "number", "string" และ "thread" ในขณะเดียวกันก็รักษาความเป็นไปได้ของการใช้การพิมพ์แบบไดนามิกโดยไม่ต้องกำหนดประเภทของตัวแปรและฟังก์ชันอย่างชัดเจน ฟังก์ชั่น foo(x: number, y: string): บูลีน local k: string = y:rep(x) return k == “a” end
  • รองรับตัวอักษรสตริง (เช่นเดียวกับใน Lua 5.3) เช่น "\0x**" (เลขฐานสิบหก), "\u{**}" (อักขระ Unicode) และ "\z" (ท้ายบรรทัด) รวมถึง ความสามารถในการมองเห็นการจัดรูปแบบตัวเลข (คุณสามารถเขียน 1_000_000 แทน 1000000) ตัวอักษรสำหรับเลขฐานสิบหก (0x...) และเลขฐานสอง (0b......)
  • รองรับนิพจน์ "ดำเนินการต่อ" ซึ่งเสริมคีย์เวิร์ด "break" ที่มีอยู่ เพื่อข้ามไปยังการวนซ้ำใหม่
  • รองรับตัวดำเนินการกำหนดแบบผสม (+=, -=, *=, /=, %=, ^=, ..=)
  • รองรับการใช้บล็อก "if-then-else" แบบมีเงื่อนไขในรูปแบบของนิพจน์ที่ส่งคืนค่าที่คำนวณระหว่างการดำเนินการของบล็อก คุณสามารถระบุจำนวนนิพจน์ elseif ในบล็อกได้ตามต้องการ maxValue ท้องถิ่น = ถ้า a > b แล้ว a else b เครื่องหมายท้องถิ่น = ถ้า x < 0 แล้วก็ -1 elseif x > 0 แล้วก็ 1 else 0
  • การมีอยู่ของโหมดแยก (แซนด์บ็อกซ์) ซึ่งช่วยให้คุณเรียกใช้โค้ดที่ไม่น่าเชื่อถือ คุณลักษณะนี้สามารถใช้เพื่อจัดระเบียบการเปิดใช้งานเคียงข้างโค้ดของคุณและโค้ดที่เขียนโดยนักพัฒนารายอื่น เช่น ไลบรารีของบุคคลที่สามเพื่อความปลอดภัยซึ่งไม่สามารถรับประกันได้
  • ข้อจำกัดของไลบรารีมาตรฐานซึ่งฟังก์ชันที่อาจสร้างปัญหาด้านความปลอดภัยได้ถูกลบออกแล้ว ตัวอย่างเช่นไลบรารี “io” (การเข้าถึงไฟล์และกระบวนการเรียกใช้), “แพ็คเกจ” (การเข้าถึงไฟล์และโมดูลการโหลด), “os” (ฟังก์ชั่นสำหรับการเข้าถึงไฟล์และการเปลี่ยนแปลงตัวแปรสภาพแวดล้อม), “การแก้ปัญหา” ( การดำเนินการที่ไม่ปลอดภัยด้วยหน่วยความจำ) , “dofile” และ “loadfile” (การเข้าถึง FS)
  • จัดเตรียมเครื่องมือสำหรับการวิเคราะห์โค้ดแบบคงที่ การระบุข้อผิดพลาด (linter) และตรวจสอบการใช้ประเภทที่ถูกต้อง
  • เป็นเจ้าของ parser, bytecode traper และคอมไพเลอร์ประสิทธิภาพสูง Luau ยังไม่รองรับการคอมไพล์ JIT แต่มีการอ้างว่าล่าม Luau มีประสิทธิภาพเทียบเท่ากับ LuaJIT ในบางสถานการณ์

ที่มา: opennet.ru

เพิ่มความคิดเห็น