Daniil
https://github.com/iryont/lua-struct
А, да, видел. Сяп. Прикольная штука, но ради одного кейса пока в проект подливать какую-то либу не хочется. По сути, мне надо просто указать размер записанных данных перед самими данными. Как вариант рассматривалось ещё прям hex положить сначала. Но такое... Из плюсов то, что не зависит от разрядности, но вместо 4 байт получается 8 (и 16 вместо 8, соответственно) - эт не очь хорошо.
Daniil
Ага, крч, просто как uint32 записал - должно быть норм. Там и формула преобразования простенькая даже для чистого Lua, и места немного занимает, и кейс закрывает.
Константин
Чуваки, кто встраивает lua, получается чтобы забиндить свой тип, нужно создать fulluserdata, и к нему присобачить метатаблицу с index и newindex?
Snusmumriken
Чуваки, кто встраивает lua, получается чтобы забиндить свой тип, нужно создать fulluserdata, и к нему присобачить метатаблицу с index и newindex?
О, привет дланговцам. Да, когда ты биндишь свой тип в fulluserdata, ты такой берёшь, луёвыми средствами размечаешь блок памяти под эту юзердату, допустим int lua_newVec(lua_State * L, float x, float y) { Vector2 * v = (Vector2 * )lua_newuserdata(L, sizeof(Vector2)); // сама юзердата находится на стеке // мы ранее объявляли метатаблицу Vector2 в реестре // через luaL_newmetatable(L, "Vector2"); luaL_getmetatable(L, "Vector2"); lua_setmetatable(L, -2); // присобачиваем к userdata метатаблицу Vector2, она уходит со стека v->x = x; v->y = y; return 1; // возвращаем юзердату в луа } Луа при этом управляет памятью, когда этот объект будет недоступен из луа, луа же его и соберёт, опционально дёрнув деструктор из метатаблицы.
Snusmumriken
__index в метатаблице тебе нужен для получения методов и полей юзердаты. __newindex для задания новых полей (в юзердате нет собственных полей, поэтому оно будет вызываться всегда)
Snusmumriken
Конкретно для полей, я обычно делаю что-то такое:
Константин
Конкретно для полей, я обычно делаю что-то такое:
Хммм, если это код из твоего проекта, я бы добавил destruct, типо a, b = some_vec.destruct()
Snusmumriken
Ммм, зачем его ломать?
Snusmumriken
Луа сама соберёт его память, вызвав метаметод __gc если есть. Там всё удаление, если ты размечал дополнительную память для данной юзердаты.
Константин
Ммм, зачем его ломать?
Ну типо, destruct вернёт 2 значения
Константин
Вместо local a = some_vec.x; local b = some_vec.y;
Snusmumriken
Смотри как это выглядит на луёвой стороне: local vec = vec2_new(10, 20) vec.x = 30 --> вызовется __newindex со строковым ключом x. vec.y = 50 --> вызовется __newindex со строковым ключом y. Никто не мешает отдельно делать геттеры и сеттеры. vec:set(50, 60) и local x, y = vec:get()
Константин
Оо, local a, b = vec.xy();
Snusmumriken
Оо, local a, b = vec.xy();
Так тоже можно но это жесть обработка пользовательского ввода, xyzz-ать придётся вручную, обрабатывая строковый ключ и выдавая параметры по полю.
Snusmumriken
Но суть не принципиальна. Мы ведь не конкретно над векторами работаем, мы хотим работать с юзердатой как с обычной луёвой табличкой, опционально с метатаблицей. И мы это получаем. Берём любой структ, делаем его на луёвой стороне и высылаем луям.
Snusmumriken
Единственное с чем могут возникнуть проблемы — юзердата которая должна управляться с чисто сишной стороны. Как правило это куски каких-нибудь фреймворков, например CEF (который хромиум) выдаёт наружу целый здоровый массив текущего отрендеренного кадра браузера в BGRA, и его крайне нежелательно менять, но и копировать в луа может быть дорого, поэтому мы такие можем взять, и сделать структуру-обёртку с указателем на этот массив, и меткой актуальности, чтобы все операции с ним можно было делать только пока CEF его не поломал. И рыбку съели и разметку памяти не перегрузили.
Snusmumriken
И да, ты всегда можешь положить на обработку __index и __newindex здоровый болт, и сделать как раз функции-геттеры и сеттеры для каждого поля, будет простым набором функций. Главное чтобы в __index метатаблицы юзердаты была таблица с заданными тобой методами.
Andrey
Всем привет! Коллеги можете объяснить иногда zbstudio ведет себя не стабильно особенно на командах print
Andrey
что здесь означает Неправильный путь приложения ?
Anonymous
что здесь означает Неправильный путь приложения ?
Думаю перевод корявый и просто путь файла в котором возникла ошибка
Andrey
А у кого нить такое было уже ? Чем и как лечить рекомендуете ?
Andrey
Проблему по моему решил очень странным образом. Скачал архив без инсталлятора. Запустил экзешник (на диске C в загрузках) внезапно оно перестало падать
A
Хммм, если это код из твоего проекта, я бы добавил destruct, типо a, b = some_vec.destruct()
Вы имеете в виду "деструктурирующее присваивание", lua так из коробки может, а snus, вероятно, destruct как деструктор, т.е. функцию очистки, если за собой надо что-то убирать (например, динамическую память, выделенную в C при __newindex)
Leon174
Проблему по моему решил очень странным образом. Скачал архив без инсталлятора. Запустил экзешник (на диске C в загрузках) внезапно оно перестало падать
Клонирование репозитория один из стандартных способов установки. Так что это норма, не странно совсем. https://github.com/pkulchenko/ZeroBraneStudio#installation
Leon174
По сути это вообще единственный способ получить zbs, если не брать в расчет последний релиз двухгодичной давности.
Andrey
пофиг, двухгодичная давность тоже устроит
Andrey
Коллеги подскажите еще пожалуйста такую штуку - есть текст в двубайтной кодировке utf8 / ansi у одних русских букв размер 2 байта у других по одному, необходимо считать правильный размер в буквах - ни у кого под рукой функции не завалялось ?
Константин
И это вроде в стд Луи есть
Andrey
да, только в тексте есть еще латинские
Andrey
и деление на два не поможет
Константин
В документации lua есть
Leon174
https://q-syshelp.qsc.com/Content/Control_Scripting/Lua_5.3_Reference_Manual/Standard_Libraries/4_-_Basic_UTF-8_Support.htm
Константин
А когда я смогу стать смешариком, и постить ссылки?
Leon174
Чуть позже, настояться надо, мхом обрасти.
Godruma-vihari Dasa
В Lua 5.4 есть функция utf8.len, которая считает символы
Andrey
так. а у меня только 5.3
Andrey
но спасибо!
Andrey
в 5.3. тоже есть!
Константин
А вообще, какой сейчас стандарт Луи считается, ну, самым стандартным.
Константин
5.1?
Leon174
У 5.1, пожалуй, перевес из-за luajit.
Кеня
кто перехватом трафика занимается?
Tony
кто перехватом трафика занимается?
Wireshark? Провайдеры? Спецслужбы?
Джифорсович
кто перехватом трафика занимается?
Щас придут админы и сделают тебе перехват жопы.
Snusmumriken
Затея интересная
Кеня
Щас придут админы и сделают тебе перехват жопы.
Извеняюсь,я был не опытный,но спасибо опытный человек предупредил
Джифорсович
Будешь,вот,так,без,пробелов,кавычки,писать,лично,буду,шеймить
Кеня
не кавычки
Кеня
а запятые
Кеня
😏
Джифорсович
запятые, сори, я хохолд
Джифорсович
Вибачтэ пробачтэ
Yaroslav
Привет. Подскажите плз по паттернам для string.match() , как мне сделать строгий поиск вхождения? Например, нужен поиск подстроки http, без учета https
Vyacheslav
ну ты же понимаешь, что так не бывает
Vyacheslav
в строке https есть строгое совпадение с http
Yaroslav
А если по кол-ву символов?
Yaroslav
дополнительно
Yaroslav
В общем просто в лоб проверяю, что нету метчинга по https и потом проверять что есть http)
Джифорсович
Yaroslav
http:
А ты хорош
Джифорсович
Джифорсович
http:
Aydar
так уже решили)
Хорошо когда есть альтернативы.
Wsevolod
И даже не посикс