Выполнение кода Lua 5.1 в среде Lua 5.2

Я нахожусь в чистой среде Lua 5.2, и мне нужно выполнить код Lua 5.1. Этот код является произвольным кодом пользователя, поэтому я не могу выполнить перенос на Lua 5.2 заранее. Насколько я понимаю, это повлечет за собой повторную реализацию getfenv / setfenv, изменение строки _VERSION, сокрытие глобального _ENV и повторную реализацию удаленных устаревших функций. Я что-то пропустил или есть лучший способ сделать это? (Я могу писать код только на чистом Lua, и мне нужно иметь возможность выполнять код 5.1, поскольку это предназначено для обеспечения обратной совместимости.)


person programmedpixel    schedule 19.08.2014    source источник
comment
Это невозможно сделать напрямую, если вы настаиваете на полной совместимости. Например, код Lua 5.1 может включать вызов load с байтовым кодом Lua 5.1. Если вы можете обойтись меньшими затратами, см. lua-users.org/wiki/LuaVersionCompatibility; в частности, github.com/davidm/lua-compat-env.   -  person lhf    schedule 19.08.2014
comment
@lhf Я просто хочу как можно больше совместимости. К счастью, я нахожусь в среде, где байт-код в любом случае отключен по соображениям безопасности. РЕДАКТИРОВАТЬ: Спасибо за ссылки. Очень полезно.   -  person programmedpixel    schedule 19.08.2014
comment
@lhf Вы должны опубликовать их в качестве ответа, так как просто нет ничего лучше, что кто-то мог бы придумать.   -  person Llamageddon    schedule 01.06.2015


Ответы (1)


Это может быть сложно сделать в целом, но есть частичные решения, которые могут сработать для вас.

Для уровня совместимости см. lua-compat-env.

Для дальнейшего обсуждения и других решений см. Совместимость версий Lua.

person lhf    schedule 01.06.2015