หลังจากการพัฒนาเป็นเวลาสองปี ในวันที่ 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

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