8 – Несовместимости с предыдущей версией

Здесь перечислены несовместимости, которые могут возникнуть при переносе программы с Lua 5.4 на Lua 5.5.

Некоторых несовместимостей можно избежать, скомпилировав Lua с подходящими опциями (см. файл luaconf.h). Однако все эти опции совместимости будут удалены в будущем. Чаще всего проблемы совместимости возникают, когда эти опции совместимости удаляются. Поэтому при любой возможности следует попробовать протестировать свой код с версией Lua, скомпилированной с отключёнными всеми опциями совместимости. Это облегчит переход к более новым версиям Lua.

Версии Lua всегда могут изменять C API так, что это не требует изменений исходного кода программы, например, числовые значения констант или реализацию функций в виде макросов. Поэтому никогда не следует предполагать, что двоичные файлы совместимы между разными версиями Lua. Всегда перекомпилируйте клиентов Lua API при использовании новой версии.

Аналогично, версии Lua всегда могут изменять внутреннее представление предкомпилированных фрагментов; предкомпилированные фрагменты несовместимы между разными версиями Lua.

Стандартные пути в официальном дистрибутиве могут изменяться от версии к версии.

8.1 – Несовместимости в языке

  • Слово global является зарезервированным словом. Не используйте его как обычное имя.

    Опция компиляции LUA_COMPAT_GLOBAL (см. luaconf.h) делает global обычным словом.

  • Управляющая переменная в циклах for доступна только для чтения. Если вам нужно её изменить, объявите локальную переменную с тем же именем в теле цикла.
  • Цепочка метаметодов __call может содержать не более 15 объектов.
  • В случае ошибки nil в качестве объекта ошибки заменяется строковым сообщением.

8.2 – Несовместимости в библиотеках

  • Параметры сборки мусора не задаются опциями "incremental" и "generational"; вместо этого для этой цели есть новая опция "param". Кроме того, произошли некоторые изменения в самих параметрах.

8.3 – Несовместимости в API

  • В lua_call и связанных функциях максимальное значение для числа требуемых результатов (nresults) равно 250. Если вам действительно нужно большее значение, используйте LUA_MULTRET, а затем скорректируйте размер стека. Ранее этот предел не был указан.
  • lua_newstate имеет третий параметр — начальное значение для хеширования строк.
  • Функция lua_resetthread устарела; она эквивалентна lua_closethread с from, равным NULL.
  • Функция lua_setcstacklimit устарела. Её вызовы можно просто удалить.
  • Функция lua_dump изменила способ, которым она поддерживает стек при вызовах функции записи. (В предыдущих версиях это не было указано.) Кроме того, она вызывает функцию записи ещё один раз, чтобы сигнализировать об окончании дампа.
  • Параметры сборки мусора не задаются опциями LUA_GCINC и LUA_GCGEN; вместо этого для этой цели есть новая опция LUA_GCPARAM. Кроме того, произошли некоторые изменения в самих параметрах.
  • Функция lua_pushvfstring теперь сообщает об ошибках, а не возбуждает их.