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теперь сообщает об ошибках, а не возбуждает их.