Реліз мови програмування Lua 5.4

Alex Alex 30 червня 2020
Реліз мови програмування Lua 5.4

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

Lua комбінує простий процедурний синтаксис з потужними можливостями опису даних через використання асоціативних масивів і розширюваної семантики мови. У Lua використовується динамічна типізація, мовні конструкції перетворюються в байт-код, що виконується поверх реєстрової віртуальної машини з автоматичним збирачем сміття. Сам інтерпретатор оформлений у вигляді бібліотеки, легко інтегрується в проєкти на мовах C та С++.

Основні новини:

  • Реалізований новий режим роботи збиральника сміття - "generational", який доповнив собою раніше доступний інкрементальний режим сміттєзбірника. Новий режим передбачає частіший запуск скороченого обходу, охоплює тільки недавно створені об'єкти. Повний обхід усіх об'єктів виконується тільки, якщо після скороченого обходу не вдалося досягти бажаних показників споживання пам'яті. Подібний підхід дозволяє досягти вищої продуктивності та зменшення споживання пам'яті в ситуації зберігання великої кількості об'єктів, що живуть короткий час.
  • Додана можливість визначення постійних змінних, що визначаються з атрибутом "const". Такі змінні можуть бути назначені тільки один раз і після ініціалізації вже не можуть бути змінені.
  • Додана підтримка змінних "to-be-closed", які назначаються за допомогою атрибута "close" і нагадують постійні локальні змінні (з атрибутом const), відрізняючись від них тим, що значення закривається (викликається метод "__close") при кожному виході з області видимості, наприклад, після завершення блоку, переходу за допомогою break/goto/return або виходу при виникненні помилки.
  • Тип userdata", що надає можливість зберігання в Lua-змінних будь-яких Сі даних (представляє блок даних в пам'яті або містить Сі покажчик), тепер може містити кілька значень (мати кілька метатаблиць).
  • Представлена нова реалізація функції для генерації псевдовипадкових чисел - math.random.
  • Додана система попереджень, які визначаються за допомогою виразу warn і, на відміну від помилок, які не впливають на подальше виконання програми.
  • Додана налагоджувальна інформація про аргументи функцій і значень, що повертаються в операторі return.
  • Запропонована нова семантика для перебору цілих чисел у циклах "for". Розрахунок числа ітерацій проводиться до початку циклу, що дозволяє уникнути переповнення змінної та зациклення. Якщо початкове значення більше обмежуваного, то виводиться помилка.
  • У функцію 'string.gmatch' доданий новий необов'язковий аргумент 'init' який визначає з якої позиції почати пошук (за замовчуванням з 1 символу).
  • Додано нові функції 'lua_resetthread' (скидає потік, очищає весь стек викликів і закриває всі "to-be-closed" змінні) і 'coroutine.close' (закриває співпрограму і всі пов'язані "to-be-closed" змінні).
  • Функції перетворення рядків у числа переміщені в бібліотеку "string".
  • Виклик функції виділення пам'яті тепер може завершитися невдачею у разі скорочення розміру блоку пам'яті.
  • У функцію 'string.format' додана підтримка нового специфікатора формату '%p' (показник, зворотний lua_topointer).
  • У бібліотеці utf8 забезпечена підтримка кодів символів з номерами до 2^31.

Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.