The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступен язык программирования Lua 5.5

22.12.2025 23:07

После пяти лет разработки доступен релиз Lua 5.5, быстрого и компактного скриптового языка программирования, получившего большое распространение в качестве встраиваемого языка для определения конфигурации и для написания расширений. Код интерпретатора Lua написан на языке Си и распространяется под лицензией MIT.

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

Основные новшества:

  • Для большей части операций сборки мусора задействован инкрементальный режим, при котором цикл сборки мусора разбивается на отдельные шаги, чередующиеся с выполнением программы, что позволяет избавиться от длительных приостановок выполнения приложений с большим числом объектов в памяти.
  • Предложена компактная реализация массивов, требующая на 60% меньше памяти для массивов с однотипными данными (экономия достигается благодаря тому, что данные о типе сохраняются не для каждого элемента, а для группы элементов).
  • Добавлена возможность явного объявления глобальных переменных в любых блоках кода при помощи ключевого слова "global". При указании в блоке кода выражений с ключевым словом "global", все переменные обязательно должны объявляется явно. Если объявление "global" отсутствует, то неявно выставляется выражение "global *" при котором сохраняется старое поведение и все переменные трактуются, как глобальные. Также добавлено выражение "global<const> *" при котором все неявно определённые глобальные переменные становятся доступны в режиме только для чтения.
    
         X = 1       -- Ok, X - глобальная переменная, старое поведение по умолчанию.
         do
           global Y  -- объявление переменой Y как глобальной, все остальные переменные в блоке должны объявляться явно
           Y = 1     -- Ok, переменная Y ранее определена
           X = 1     -- Ошибка, переменная X не определена
         end
         X = 2       -- Ok, вне блока global с действует старое поведение
    
  • Указываемые в циклах "for" управляющие переменные теперь доступны только для чтения и не могут быть изменены в теле цикла. Например, переменная i, объявленная в цикле "for i = 1, 5 do", не может быть изменена в теле цикла.
  • При выводе чисел с плавающей запятой через функцию print теперь выводится достаточное число цифр для корректного обратного преобразования из строки в исходное представление.
  • Увеличено допустимое число уровней вложенности конструкторов таблиц.
  • Добавлена функция table.create(nseq, nrec) для добавления пустой таблицы и предварительного выделения памяти для указанного числа элементов.
  • В функции utf8.offset обеспечен возврат не только байтового смещения до начала символа, но и позиции конца символа.
  • Добавлена поддержка создания внешних строк, размещаемых в памяти, не управляемой сборщиком мусора Lua.
  • Добавлена функция luaL_openselectedlibs для загрузки выбранной библиотеки, а также функция luaL_makeseed, формирующая seed-затравку для функции lua_newstate.
  • В lua.c обеспечена динамическая загрузка библиотеки 'readline' при её наличии (если библиотека есть в системе - она загружается и становятся доступны функции редактирования строк).
  • Включена оптимизация для экономии памяти при загрузке предварительно скомпилированного байткода - Lua теперь может повторно использовать память в некоторых внутренних структурах без создания дубликатов при загрузке дублирующегося байткода.
  • Обеспечено повторное использование всех строк в операциях "dump" и "undump".
  • Во вспомогательных буферах обеспечено повторное использование буферов (без копирования в новый буфер) при создании финальной строки.


  1. Главная ссылка к новости (https://www.lua.org/news.html...)
  2. OpenNews: Lunatik - инструментарий для создания в ядре Linux обработчиков на языке Lua
  3. OpenNews: Открыт код Luau, варианта языка Lua с проверкой типов
  4. OpenNews: Релиз языка программирования Lua 5.4
  5. OpenNews: Компания Microsoft опубликовала реализацию Lua VM, написанную на языке Go
  6. OpenNews: В ядро NetBSD добавлена поддержка расширений на языке Lua
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64476-lua
Ключевые слова: lua
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (18) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Недоэксперт (?), 00:04, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    а continue так и не добавили )
     
  • 1.3, Аноним (-), 00:05, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    через одного с ним работали, либо сталкивались
     
  • 1.4, Аноним (4), 00:07, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почти во всех реальных проектах с Lua люди используют LuaJIT, так что полезность данного релиза, к сожалению, не такая большая.
     
  • 1.5, Аноним (5), 00:19, 23/12/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.6, Аноним (6), 00:32, 23/12/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     
  • 1.7, Аноним (7), 00:38, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  Указываемые в циклах "for" управляющие переменные теперь доступны только для чтения и не могут быть изменены в теле цикла. Например, переменная i, объявленная в цикле "for i = 1, 5 do", не может быть изменена в теле цикла.

    А такое вообще допустимо в минорном релизе? По-моему, сначала надо объявлять deprecated, в следующем мажорном релизе выводить ворнинги, и только в ещё следующем — выпиливать.

     
     
  • 2.8, Кошкажена (?), 00:47, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У них не семвер.
     
  • 2.9, Аноним (9), 00:49, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В Lua это делается как раз в минорных релизах. Кто часто использует - привыкли. По мне так выпиливать нужно тех, кто меняет значения управляющих переменных цикла в теле цикла вне зависимости от используемого языка.
     
     
  • 3.15, Аноним (15), 01:19, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Обработку какого-нибудь буфера вполне можно так делать. Возвращаться на отступ с уже измененным состоянием. Одно дело когда человек не знает, что делает, и другое - запрещать тем, кто знает.
     
     
  • 4.19, Аноним (9), 01:34, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Речь про то, что такое читать сложно. В коде явно указано перечисление с указанным шагом (по умолчанию: 1) и полагаешься на это. Когда переменная инициируется до цикла - вопросов нет. Я, к примеру, даже не знаю, не "кэшируется" ли та переменная в каком-нибудь внутреннем регистре во время выполнения цикла и куда именно будет добавлена единичка. Так что даже не пытаюсь туда что-нибудь писать.
     

  • 1.10, Кошкажена (?), 00:50, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Добавлена возможность явного объявления глобальных переменных в любых блоках кода при помощи ключевого слова "global".

    Глобальные переменные по умолчанию - это, конечно, надо исправлять. Вот похоже пытаются.

     
     
  • 2.11, Аноним (11), 00:53, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    напрасная потеря времени
     
  • 2.12, Аноним (9), 01:05, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В своем коде я запрещаю чтение или запись в несуществующую глобальную переменную. Позволяет избежать множества скрытых ошибок.
     

  • 1.13, Аноним (13), 01:08, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Язык дико неудобен, начиная с end вместо фигурных скобок, и заканчивая тотальным отсутствием стандартной библиотеки. Прям вообще отсутствует, напрочь. Даже ключи словаря не достанешь -- иди пиши аналог Object.keys() с нуля. Единственное преимущество луа -- встраиваемость, по сути язык номер один, если нужна легковесная скриптуемость.
     
     
  • 2.14, Аноним (15), 01:15, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >начиная с end вместо фигурных скобок

    Вопрос привычки. С плохим форматированием кода лес из скобок не менее ужасен.

    >Даже ключи словаря не достанешь -- иди пиши аналог Object.keys()

    Иди про итераторы прочитай. Или ты их не понимаешь, прямо как замыкания в JS? Вот что значит первым языком пихон.

    >заканчивая тотальным отсутствием стандартной библиотеки. Прям вообще отсутствует, напрочь

    Есть luarocks какие хочешь.

     
     
  • 3.17, Аноним (13), 01:31, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > С плохим форматированием кода лес из скобок не менее ужасен.

    То есть ты признаешь, что хорошо отформатированный код на луа примерно так же ужасен, как и плохо отформатированный код на си-подобном языке?

    > Иди про итераторы прочитай

    Коллект добавили в стд библиотеку? Чтобы можно было итератор сконвертнуть в массив и делать random access? Или ты не понимаешь, что итераторы применимы далеко не везде?

    > Есть luarocks какие хочешь

    Какую букву во фразе "_стандартная_ библиотека" ты не понял?

     
  • 2.16, Аноним (9), 01:23, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Именно оттого, что он встроенный, стандартной библиотеки нет - на всех не угодишь, да и не нужно. Все что требуется, можно дополнительно реализовать в lua коде или в вызывающем коде. Я к примеру, уже и не упомню, когда мне последний раз требовалось перечислять ключи, хотя Lua использую часто.

    Что касается синтаксиса - дело привычки.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру