หลังจากการพัฒนาเป็นเวลาสองปี ในวันที่ 29 มิถุนายน ภาษาโปรแกรม Lua เวอร์ชัน 5.4 เวอร์ชันใหม่ก็ได้รับการเผยแพร่อย่างเงียบๆ
Lua เป็นภาษาโปรแกรมที่เรียบง่ายและมีการตีความซึ่งสามารถรวมเข้ากับแอปพลิเคชันได้อย่างง่ายดาย เนื่องจากคุณสมบัติเหล่านี้ Lua จึงถูกใช้อย่างกว้างขวางเป็นภาษาสำหรับการขยายหรืออธิบายการกำหนดค่าของโปรแกรม (โดยเฉพาะเกมคอมพิวเตอร์) Lua ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT
เวอร์ชันก่อนหน้า (5.3.5) เปิดตัวเมื่อวันที่ 10 กรกฎาคม 2018
การเปลี่ยนแปลงหลักในเวอร์ชันใหม่
-
คนเก็บขยะยุคใหม่ ในฟังก์ชัน collectgarbage พารามิเตอร์ setpause และ setstepmul เลิกใช้แล้ว และแนะนำให้ใช้พารามิเตอร์ส่วนเพิ่มแทน
-
ฟังก์ชั่นใหม่สำหรับการออกคำเตือนพร้อมความสามารถในการปิดการใช้งานการแสดงผล
-
การใช้งาน Math.random ใหม่จะใช้อัลกอริธึม xoshiro256** แทน libc ที่ให้มา และเริ่มต้นตัวสร้างด้วยตัวเลขสุ่ม
-
ตัวแปรคงที่
-
ตัวแปร “to-be-closed” คือค่าคงที่ภายในเครื่องซึ่งมีการดำเนินการเมธอด __close เมื่อออกจากขอบเขต
-
ฟังก์ชั่นใหม่ lua_resetthread - ล้างสแต็กและปิดตัวแปร "ปิด" ทั้งหมด
-
ฟังก์ชั่นใหม่ coroutine.close - ปิด coroutine ที่ระบุและตัวแปร "ปิด" ทั้งหมด
-
ข้อมูลผู้ใช้อาจมีชุดของค่าที่เข้าถึงได้โดยดัชนี มีการแนะนำฟังก์ชั่นใหม่เพื่อใช้งานกับพวกเขา: lua_newuserdatauv, lua_setiuservalue และ lua_getiuservalue;
-
มีข้อมูลการดีบักเกี่ยวกับพารามิเตอร์และค่าส่งคืนของฟังก์ชัน
-
หากใช้ดัชนีจำนวนเต็มใน for for loop และเกิดการโอเวอร์โฟลว์ การวนซ้ำจะสิ้นสุดลง
-
มีการเพิ่มอาร์กิวเมนต์ทางเลือกให้กับฟังก์ชัน string.gmatch โดยระบุออฟเซ็ตจากจุดเริ่มต้นของสตริงเพื่อค้นหารายการที่ตรงกัน
-
ฟังก์ชันสำหรับการแปลงสตริงเป็นตัวเลขโดยปริยายได้ถูกย้ายไปยังไลบรารีสตริงแล้ว และพฤติกรรมของฟังก์ชันก็เปลี่ยนไป ตัวอย่างเช่น ผลลัพธ์ของการดำเนินการ "1" + "2" ตอนนี้เป็นจำนวนเต็มแทนที่จะเป็นตัวเลขทศนิยม
-
ในฟังก์ชันการจัดสรรหน่วยความจำอาจเกิดข้อผิดพลาดเมื่อลดบล็อกหน่วยความจำ
-
อักขระการจัดรูปแบบใหม่ในฟังก์ชัน string.format - %p (สำหรับพอยน์เตอร์)
-
ไลบรารี utf8 ยอมรับโค้ดอักขระสูงสุด 2³¹ (หากระบุแฟล็กพิเศษ โดยไม่อนุญาตเฉพาะโค้ดสูงสุด 0x10FFFF เท่านั้น และไม่อนุญาตให้มีตัวแทนแทน)
-
ค่าคงที่จำนวนเต็มที่อยู่นอกช่วงของค่าจะถูกแปลงเป็นตัวเลขลอยตัว (ก่อนหน้านี้เกิดการตัดบิต)
-
__lt metamethod ไม่ได้ถูกใช้เพื่อจำลอง __le metamethod อีกต่อไป หากจำเป็น __le metamethod จะต้องได้รับการระบุอย่างชัดเจน
-
ไม่สามารถสร้างป้ายกำกับสำหรับคำสั่ง goto ได้หากมีป้ายกำกับที่มีชื่อเดียวกันอยู่แล้วในขอบเขตปัจจุบัน (แม้ว่าจะถูกกำหนดไว้ในขอบเขตภายนอกก็ตาม)
-
เมธอด __gc เป็นมากกว่าแค่ฟังก์ชัน หากความพยายามในการเรียกเมธอดล้มเหลว คำเตือนจะถูกพิมพ์ออกมา
-
ฟังก์ชั่นการพิมพ์ไม่เรียก tostring สำหรับแต่ละอาร์กิวเมนต์ แต่ใช้การแปลงภายในของตัวเอง
-
ฟังก์ชัน io.lines ส่งคืนชุดสี่ค่าแทนที่จะเป็นหนึ่งค่า เพื่อจำลองพฤติกรรมเก่า ให้ใส่การโทรในวงเล็บหากคุณส่งเป็นพารามิเตอร์ไปยังการเรียกใช้ฟังก์ชันอื่น
ที่มา: linux.org.ru