Yuriy
Да в том то и дело что нет...
Yuriy
Я тоже думал что где то накосяцил но тест в общем то даже не знает о ее существовании
Yuriy
Он просто запускает функцию модуля
Yuriy
и сравнивает выходное значение с ожидаемым
Ivan
функция удаляет?
Yuriy
local direction = { to = "to", from = "from" } local function callState() local pDir = direction.from ... end Негде удалять Эта таблица больше потом не используется
Ivan
а как ошибка выглядит?
Yuriy
attempt to index upvalue 'direction' (a nil value)
Yuriy
ну логично конечно предположить что где то оно удаляется...
Yuriy
но я пока вот так явно не вижу этого
Yuriy
чсейчас попробуж сделать глубокое копирование
Ivan
может быть, для дебага прикрепить к direction мета таблицу которая показывает что делается?
Yuriy
да. Попробую
Yuriy
Спасибо
Yuriy
нашел проблему... У меня есть 2 руки. но растут они из жопы Ибо толкьо так я могу объяснить что в одном месте я все таки сделал вместо local pDir = direction.from direction = directon.from
Igor
всем привет мб кто сталкивался... у lua есть огрангичение на количество локальных таблиц? У меня просто есть модуль в котором обхявлена таблица Модуль покрыт тестами И если тестов больше чем n то эту таблицу он найти не может... и у меня уже немного крышняк начинат ехать от этого ))
Хоть проблема и решена, всё же отвечу на первый вопрос. В луях есть ограничение по размеру таблиц, оно же по совместительству ограничение на максимально возможное используемое пространство ОЗУ процессом. Lua могёт отхватить максимум около 2 гигабайт ОЗУ (зависит от битности интерпретатора, я писал про 32 битный, 64 битный, естественно, больше)
Igor
Если же этот лимит будет достигнут, то интерпретатор упадёт с ошибкой "Out of memory"
Yuriy
Да. Это я понимаю. Но все равно спасибо за пояснение)
Yuriy
Кстати 5.1 только 32 бита?
Yuriy
А то я упираюсь там в размер integer при взятии миллисекунд как числа
mva
для истории
@igor2608 @ovoshlook ^
mva
> Lua могёт отхватить максимум около 2 гигабайт ОЗУ
mva
Ку, Вадик!
Не называй меня так :E
Tom
Народ, а в чем вы отлаживаете lua-код? Я сейчас в основном на vscode пишу, но тут дебаг lua что-то вообще никак не хочет работать адекватно. На консольном вводе значений тупо зависает. Останавливает выполнение в неожиданных местах. Короче нахер.
Tom
Не называй меня так :E
А Вадимкой можно?
mva
в отдельном окне запускаешь сервер mobdebug выполнением функции require('mobdebug').listen()
@caufman почитай вот начиная с этого сообщения и немного вниз
Tom
Вот кстати да, збс сегодня уже попробовал. Оно вроде работает, хотя немного странное какое-то
Snusmumriken
> Lua могёт отхватить максимум около 2 гигабайт ОЗУ
У 5.1 х32 лимиты как у обычного х32-приложения, то есть около 4гб. Только вот у luajit x32/x64 раньше был одинаковый лимит в 1-2гб, а скрин — подтверждение фикса luajit 2.1 beta 3 же.
mva
/me мечтает чтобы люди перестали использовать x32 и x64, потому что "x" к битности не имеет отношения, зато вносит путаницу. Особенно для тех, кто знает про существование не только x86_32 и x86_64, но и x86_x32, который и есть настоящий "x32", и у него прямо "/usr/libx32" в мультилиб-системе
Snusmumriken
Ничего страшного, тут имеется ввиду, очевидно, [что угодно]_32 и [что угодно]_64. Хоть x86_32 хоть ARM_64.
mva
а вот, кстати, не уверен, что на арм64 завезли фикс для памяти
mva
и ещё менее уверен что для мипса или ppc 64битного завезли
mva
там их мейнтейнят, емнип, только когда денег завозят
Snusmumriken
А на тему х — это можно использовать как знак умножения, мол столько-то битов на указатель/минимальную единицу : ) 2х2 = 4, всё такое.
Andrey
всем привет. а luac можно в exe перекомпилить ?
Snusmumriken
Можно.
Andrey
а как это правильно делается ?
Snusmumriken
Сшивается скрипт и луа-интерпретатор.
Andrey
ну т.е. интерпритатор будет тоже зашит
mva
только не "exe", а "испольняемый файл", потому что не вендой единой
Andrey
я бы хотел что бы потом обратно его было возможно преобразовать только на уровне дизассемблера без восстановления исходного кода
Igor
Если сильно приспичит - принтами)
Tom
Если сильно приспичит - принтами)
Ну эт очевидно, но не хотелось бы :)
Snusmumriken
ну т.е. интерпритатор будет тоже зашит
Буквально, пишешь маленькую сишную программку: #include "lua.h" #include "lauxlib.h" void main() { lua_State * L = newL_newstate(); luaL_openlibs(L); // вшиваем код сюда char * code = "blabla lua/luac code"; luaL_dostring(L, code); lua_close(L); }
Igor
mobdebug довольно мощная штучка
Igor
Но у неё luasocket в зависимостях
Igor
Если для тебя это не проблема, то юзай на здоровье
Andrey
Все, идею понял, спасибо
Tom
Но у неё luasocket в зависимостях
Что это значит для меня, как для человека, который второй день смотри на луа-код?
Igor
luasocket - модуль для взаимодействия с сетью
Igor
Может как tcp так и udp сокеты открывать
Igor
Как на прослушивание, так и на коннект
Igor
В общем обычная библиотека сокетов
mva
я бы хотел что бы потом обратно его было возможно преобразовать только на уровне дизассемблера без восстановления исходного кода
если ты хочешь прятать исходный код, то... А ничего не делай. Меняй мировоззрение. Потому что декоспилировать можно даже компилирвемые языки.
Snusmumriken
я бы хотел что бы потом обратно его было возможно преобразовать только на уровне дизассемблера без восстановления исходного кода
А в этом случае, придётся сначала обфусцировать/шифровать строку кода, потому что все const char * видны если открыть исполняемый файл в блокнотике : )
Andrey
:) это понятно, просто максимально затруднить обраьтный процесс. да про обсфускацию тоже в курсе. спасибо
mva
не помню, луиз или роберто писал
mva
но писал же для вас, лентяев
mva
а вы тут сишные программки для вшивания интерпретатора пишете
Snusmumriken
Да пофигу, писать-то всего ничего : )
Igor
Не вижу вообще никакого смысла в попытке спрятать скрипты
Igor
Да и вообще любой код прятать это тоже дело не очень то и благое
Igor
Я приверженец open source
mva
mva  tmp  echo 'print("hello")' > moo.lua mva  tmp  glue luajit-2.1.9999.x86_64 moo.lua myapp.elf mva  tmp  ./myapp.elf hello mva  tmp  file myapp.elf myapp.elf: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
Snusmumriken
Не вижу вообще никакого смысла в попытке спрятать скрипты
Да не, технически смысл есть. Допустим, ты пишешь игрушку, и если игрок будет знать содержимое скриптов — он сможет, например, заддосить сервер игрушки как бы валидными запросами (которые не будут отсеиваться, потому что твой каштомный протокол — вот он, на виду), или сможет читерить по мелочи. Да, понятное дело что "надо писать так, как будто твой код попал в стан врага", но это всё равно стоило бы скрыть от всех желающих. Хакиры всё равно доберутся, но их не так уж много. Просто уменьшаем количество читеров и дудосеров.
mva
чаще код игрушек прячут потому что "кококо, страшно, мой код украдут, будут КАНКУРИРАВАДЬ и Я НИЗАРАБОТАЮ"
Igor
Все игры которые я видел скрипты свои не прятали особо
mva
а писать нормально - это СЛОЖНА
Igor
Разве что Move or Die, который на ловке сделан
Snusmumriken
Все игры которые я видел скрипты свои не прятали особо
Потому что всякие публично-приватные ключи, которые там очевидно использовались, зашиты глубже.
Igor
Там разработчики filesystem ловки правили, как я понял
Igor
И создали какой-то свой формат скриптов имеющий шифрование поверх себя