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

ENG

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

 

Здесь мы перечислим несовместимости , которые вы можете найти при перемещении программы из Lua 5.2 в Lua 5.3. Вы можете избежать некоторых несоответствий путем составления Lua с соответствующими параметрами (см файл luaconf.h). Тем не менее, все эти параметры совместимости будут удалены в будущем.

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

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

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

8.1 - Изменения в языке

  • Основное различие между Lua 5.2 и Lua 5.3 является введение целого подтипа для чисел. Хотя это изменение не должно влиять на "нормальные" вычисления, некоторые вычисления (в основном те, которые связаны с какой-то переполнение) может дать разные результаты.Вы можете исправить эти различия, заставляя ряд быть числом с плавающей точкой (в Lua 5.2 все номера были с плавающей точкой), в частности , постоянные письма с окончанием .0 или используя x = x + 0.0для преобразования переменной. (Эта рекомендация только для быстрого решения для случайной несовместимости, это не является общим ориентиром для хорошего программирования Для хорошего программирования, использование поплавков , где вам нужно поплавки и целые числа , где нужно целыми числами.) .
  • Превращение поплавка в строку Теперь добавляет .0 суффикс к результату , если он выглядит как целое число. (Например, поплавок 2.0 будет напечатан 2.0, а не как 2.) Вы должны всегда использовать явный формат , когда вам нужен конкретный формат для чисел.(Формально это не является несовместимость, поскольку Lua не определяет, как числа отформатированы как строки, но некоторые программы предполагается определенный формат.)
  • Режим поколений для сборщика мусора была удалена. (Это была экспериментальная функция в Lua 5.2.)

8.2 - Изменения в библиотеках

  • bit32Библиотека устарела. Легко требуется совместимая внешнюю библиотеку или , еще лучше, чтобы заменить свои функции с соответствующими побитовые операции. (Имейте в виду , что bit32 работает на 32-разрядных целых чисел, в то время как битовые операторы в Lua 5.3 работают на Lua целые числа, которые по умолчанию имеют 64 бита.)
  • Библиотека Таблица теперь учитывает метаметодами для установки и получения элементов.
  • ipairsИтератора теперь учитывает метаметодами и его __ipairs Метаметод устарела.
  • Имена опций в io.read не имеют старт ' *' больше. Для обеспечения совместимости, Lua будет продолжать принимать (и игнорировать) этот символ.
  • Следующие функции были устаревшими в математической библиотеке: atan2, cosh, sinh, tanh, pow, frexp, и ldexp. Вы можете заменить math.pow(x,y)с x^y; вы можете заменить math.atan2с math.atan, который теперь принимает один или два параметра; вы можете заменить math.ldexp(x,exp)с x * 2.0^exp. Для других операций, вы можете либо использовать внешнюю библиотеку , или реализовать их в Lua.
  • Искатель для C погрузчиков используется require изменила , как она обрабатывает версированы имена. Теперь, версия должна прийти после того, как имя модуля (как это обычно бывает в большинстве других инструментов). Для обеспечения совместимости, что поисковое устройство до сих пор пытается старый формат , если он не может найти открытую функцию в соответствии с новым стилем. (Lua 5.2 уже работали именно так, но это не зафиксирует эти изменения.)
  • Вызов collectgarbage("count") теперь возвращает только один результат. (Вы можете вычислить , что второй результат из дробной части первого результата.)

8.3 - Изменения в API

  • Функции Продолжение теперь получают в качестве параметров , что им нужно , чтобы пройти lua_getctx, так что lua_getctx было удалено.Адаптировать ваш код соответствующим образом .
  • Функция lua_dumpимеет дополнительный параметр, strip. Используйте 0 в качестве значения этого параметра , чтобы получить старое поведение.
  • Функции для введения / проекта целые числа без знака ( lua_pushunsigned, lua_tounsigned, lua_tounsignedx, luaL_checkunsigned,luaL_optunsigned) были устаревшими. Используйте их эквиваленты , подписанные с приведения типа.
  • Макросы проекта не по умолчанию целочисленных типов ( luaL_checkint, luaL_optint, luaL_checklong, luaL_optlong) были устаревшими.Используйте их эквивалент более чем lua_Integer с броском типа (или, если это возможно, использовать lua_Integer в своем коде).

Дале ---->

Translate »