Луа 5.4

Після двох років розробки, 29 червня тихо та непомітно вийшла нова версія мови програмування Lua – 5.4.

Lua – це проста інтерпретована мова програмування, яка легко вбудовується в додатки. Завдяки цим якостям, Lua широко використовується як мова розширення або опису конфігурації програм (зокрема комп'ютерних ігор). Поширяться Lua за ліцензією MIT.

Попередня версія (5.3.5) виходила 10 липня 2018 року.

Основні зміни у новій версії

  • новий збирач сміття на основі поколінь (generational). У функції collectgarbage параметри setpause і setstepmul оголошені застарілими, замість них рекомендується використовувати параметр incremental;

  • нова функція для видачі попереджень warn з можливістю вимкнення їх відображення;

  • нова реалізація math.random використовує алгоритм xoshiro256** замість libc, що надається, і ініціалізує генератор випадковим числом;

  • константи (constant variables);

  • "закриваються" (to-be-closed) змінні - локальні константи, для яких виконується метод __close при виході з області видимості;

  • нова функція lua_resetthread — очищає стек і виконує закриття всіх змінних, що «закриваються»;

  • нова функція coroutine.close - закриває зазначену співпрограму і всі її «замінні» змінні;

  • дані користувача (userdata) можуть містити набір значень з доступом за індексом. Для роботи з ними введено нові функції: lua_newuserdatauv, lua_setiuservalue та lua_getiuservalue;

  • доступна інформація про налагодження про параметри і значення функцій, що повертаються;

  • якщо в циклі за лічильником for використовується цілий індекс і відбувається переповнення - цикл завершується;

  • до функції string.gmatch додано необов'язковий аргумент, що задає зміщення від початку рядка для пошуку збігів;

  • функції неявного перетворення рядків у числа переміщені до рядкової бібліотеки, змінилася їхня поведінка. Наприклад, результат операції "1" + "2" тепер ціле число, а не число з плаваючою точкою;

  • функції виділення пам'яті припустимо виникнення помилки при скороченні блоку пам'яті;

  • новий символ форматування функції string.format — %p (для покажчиків);

  • бібліотека utf8 приймає коди символів аж до 2³¹ (при вказівці спеціального прапора без нього допускаються тільки коди до 0x10FFFF і не допускаються сурогати);

  • цілі константи, що виходять за межі діапазону значень, перетворюються в плаваючі числа (раніше відбувалося бітове відсікання);

  • метаметод __lt більше не використовується для емуляції метаметоду __le, при необхідності, метаметод __le повинен бути заданий явно;

  • мітка для оператора goto не може бути створена, якщо в поточній області видимості вже існує мітка з таким самим ім'ям (навіть якщо вона була визначена у зовнішній області);

  • метаметод __gc може бути не лише функцією. Якщо спроба викликати метод не вдається, буде виведено попередження;

  • функція print не викликає tostring для кожного аргументу, а використовує свої внутрішні перетворення;

  • функція io.lines повертає набір із чотирьох значень замість одного, для емуляції старої поведінки укладайте виклик у дужки, якщо підставляєте його як параметр під час виклику іншої функції.

Джерело: linux.org.ru

Додати коментар або відгук