Size: a a a

2021 June 13

AT

Alexander T in pro.lua
Добрый день. Возник вопрос по C-API (встраивание). Есть ли легальный способ напрямую читать и модифицировать память нод таблиц Lua со стороны С? Решаемая задача: приложение, в которое встроен интерпретатор Lua, снаружи получает пользовательский скрипт, являющийся плотной числодробилкой, и этот скрипт зависит от кучи переменных "среды" (контекста), выставляемых приложением. Хочется минимизировать количество копий и C-API вызовов, при этом сохранив человеческий синтаксис для пользовательского скрипта, например:
-- env = {...} заполняется внешним приложением
function user_tick()
   return math.sin(env.enemy.hits + env.my.y)
end

При этом можно считать, что gc отключен и layout среды заморожен (т.е. новые таблицы не создаются, существующие не расширяются и т.д.). Сейчас используется довольно быстрая комбинация с кэшированием luaL_ref + lua_settable для установки контекста env, но, возможно, есть более производительное zero copy решение?
источник

HP

Heidy Pitts in pro.lua
8
источник

AZ

Aydar Zarifullin in pro.lua
Если env это сишная структура, то вам нужно завернуть ее в луашную userdata и прикрепить к этой userdata метатаблицу с метаметодом __index, это будет наиболее производительный вариант.
источник

AZ

Aydar Zarifullin in pro.lua
Нашел вот такой пример https://github.com/hertogp/lua-capi-examples/blob/d7d782406b132e67ad837ba9c71cef5d0d70e399/src/ex04.c из него можно узнать как создать метатаблицу и прикрепить к юзердате
источник
2021 June 14

AT

Alexander T in pro.lua
Отлично, большое спасибо, изучу. Выглядит немного вывернуто на изнанку (Lua лезет читать наружу), но логично. Интересно ещё, как уживётся с LuaJIT, даже текущее решение в ней работает крайне достойно.
источник
2021 June 15

FB

Fallon Buckner in pro.lua
11
источник
2021 June 17

RA

R A in pro.lua
Вопрос для общего развития: а кто насколько большие объёмы кода на Луа встречал?
источник

S

Snusmumriken in pro.lua
Участвую в прожэктах на 3-5кк/loc
источник

RA

R A in pro.lua
А в байтах это сколько?
источник

G

GNU/Vsevolod in pro.lua
форматите руками?
источник

S

Snusmumriken in pro.lua
Форматим?
источник

S

Snusmumriken in pro.lua
Ну в основном как бы да
источник

G

GNU/Vsevolod in pro.lua
понятно)
lua-formatter — єто ж ужас
источник

G

GNU/Vsevolod in pro.lua
Про линтер уже молчу
источник

S

Snusmumriken in pro.lua
Нормальный линтер, нормальный форматтер. Фич немного но типовой код форматируется без особых проблем. С извращениями проблемы, но их никто не любит.
источник

G

GNU/Vsevolod in pro.lua
Какой?
источник

S

Snusmumriken in pro.lua
Линтер - luacheck
источник

RA

R A in pro.lua
Меня тут сватают на проект в 300+М луашного кода. Я что-то даже не знаю, с какой стороны к этому всему подходить, да и стоит ли.
источник

G

GNU/Vsevolod in pro.lua
300+ чего?
источник

RA

R A in pro.lua
Мегабайтов. Кода на Луа.
источник