Луа 5.3.2
У меня есть служба, написанная на Lua/C, которая выполняет файлы lua в том же Lua_State.
Мне нужно предоставить все стандартные библиотеки для среды выполнения файлов.
Самое простое - запускать файлы так: loadfile(file_path, "bt", _G)
Проблема в том, что код в файле может повредить глобальное состояние службы, поэтому этот метод небезопасен.
Итак, мне нужно создать изолированную среду loadfile(file_path, "bt", env)
Вопрос: как прописать все стандартные библиотеки из linit.c в переменной env
?
Я могу просто прописать все либы из linit.c, кроме luaopen_base, потому что он содержит lua_pushglobaltable
Я подумал об этом:
local env = {}
for k,v in pairs(_G) do
if type(v)=="function" then
env[k] = v
end
end
Но это выглядит жалким решением. У кого-нибудь есть лучшее решение?