((P"foo" + P"bar")*P(-1)):match(str) :з
Snusmumriken
Уу, кажется кто-то упоролся об lpeg? : )
Есть такое.
Snusmumriken
Да, с lpeg'ом, если такое часто повторяется в цикле - лучше скомпилить и куда-то сохранить, типа: local patt = -P"foo" - P"bar" for i, v in pairs(large_list) do if patt:match(v) then ... end end В частых ивентах/повторах - тоже стоит. Иначе оно будет компиляться каждый раз, это дорого, а оно может быть реюзабельным (( Это тип просто "бесполезное предупреждение, ибо почти никто не юзает lpeg".
Yuriy
всем привет
Yuriy
есть у кого хорошие либы для отслеживания утечек памяти?
Snusmumriken
есть у кого хорошие либы для отслеживания утечек памяти?
А вот с этим сложно, потому что у луа не очень хорошая интроспекция. Можно дёргать collectgarbage() и смотреть занимаемую приложением память, и можно смотреть структуры доступные из _G. Сборка мусора, помнится, справляется с "островами", удаляя всё что недоступно из глобальной таблицы.
Snusmumriken
А что, ты как-то умудрился протечь памятью? : )
Yuriy
А что, ты как-то умудрился протечь памятью? : )
Течёт. Ну там получается что внешний процесс запускает lua машину и держит ее. Соответственно где то я видимо оставляю в G данные.
Yuriy
И они понемногу растут
Yuriy
В принципе мне достаточно будет дампа G на завершении цикла я думаю
Snusmumriken
Кстати, ты это, если у тебя с collectgarbage() память в диспетчере не полностью возвращается к оригинальному значению - это не значит что течёт. Сам процесс, запускающий луа-стейт может течь?
Yuriy
И при этом если снять нагрузку то она не кменьшается
Snusmumriken
Понял. Какие-то хранимые данные имеются? Ну там, какой-нибудь глобальный список, куда что-то складируется, типа логов/клиентов/ещё чего-то.
Yuriy
Ну вообще нет. Но всегда есть вариант что я где то оставил переменную без local)
Yuriy
Так как кода много.
Snusmumriken
С этого не должно расти. Увеличить потребление - да, расти - не особо.
Snusmumriken
Переменная просто переобъявится, старая сотрётся (если это не cdata без финалайзера).
Yuriy
Да. Я понимаю. Но там есть несколько конструкций типа a =a.. b
Yuriy
Соответственно если a забыл объявить локальной то вот тебе увеличение значения
Yuriy
Буду проверять. Вечером обнаружили
Snusmumriken
На a = a .. b - вообще пофигу. Кстати, строковый буфер имеет свои алгоритмы, если у тебя активное использование строк - тогда строковый пул может расти-расти-расти, а потом быстро очищать миллиард строк, которые были буферизированы ранее.
Snusmumriken
Так что тут сильно можно не морочиться. Поставь свою тулзу на сутки и глянь динамику. Если не падает с memerr - норм.
Yuriy
Ну пока у меня нет других предположений) буду G смотреть. Если ничего не найду, то приду паниковать сюда))) Но про строки спасибо. Не знал.
Snusmumriken
Воу
Yuriy
Ну как
Snusmumriken
А вот тут уже странно.
Yuriy
Не падает но не может обработать проуессы
Yuriy
Внешний процесс работает. Вижу память занята на всю
Snusmumriken
Хммм. Становится интереснее. В скрипте нет остановок сборщика мусора?
Yuriy
И соответственно запросы перестают обрабатываться
Yuriy
Там довольно высокруровнево все
Snusmumriken
Что за софтина-то?
Snusmumriken
Потому что я, например, сталкивался с тем, что крупное многопоточное приложение обрубает потоки, и не освобождает хендлеры, которые остались на луёвой стороне в момент жёсткого обрубания потока (обрубание критично по времени). С lua lanes аналогичная фигня была. Типа, убийство потоков == плохо.
Yuriy
Просто дело в том что на другом проекте у меня он стоит с другим кодом и так мсе норм
Yuriy
А набор либ что там что тут одинаковый
Yuriy
Там банально на каждый процесс запускается lua state и живёт. То есть если задал 8 процессов то получил 8 lua states
Yuriy
Собственно там храню некоторые глобальные вещи типа дескриптора на подключение к бд и так далее
Snusmumriken
Понял. В общем, варианты развития событий примерно следующие: 1. Ты действительно что-то не удаляешь в своих скриптах, не чистишь списки и т.п. (смотреть дамп _G) 2. При работе с сишными указателями, не вызываешь финалайзер, или сишные "объекты" (указатель + метатаблица) не имеют финалайзера 3. Какая-то непонятная фигня Так-то пул строк на memerr должен нормально очищаться.
Yuriy
Понял. В общем, варианты развития событий примерно следующие: 1. Ты действительно что-то не удаляешь в своих скриптах, не чистишь списки и т.п. (смотреть дамп _G) 2. При работе с сишными указателями, не вызываешь финалайзер, или сишные "объекты" (указатель + метатаблица) не имеют финалайзера 3. Какая-то непонятная фигня Так-то пул строк на memerr должен нормально очищаться.
Я все же думаю что 1. Так как со 2 не работаю вообще) а в магию типа 3 варианта не верю) Спасибо. Полезно узнать как garbage collector работает) В понедельник буду снимать дамп. Точнее он уже снимается. Но сейчас снимается вначале и в конце и сравнивает ся. И там ничего так как он сравнивает только на наличие новых объектов Надо будет посмотреть самый первый процесс - который все подключает в конце обработки. Там будет ответ на мой вопрос)
Snusmumriken
Тут был диалог с порно-спамером
vitaly
я опять поздал
vitaly
😂
Snusmumriken
Ты тоже порно-спамер : )
vitaly
че предлагали то?
Snusmumriken
Фотачки "бывших грешниц". А я типа предложил залезть в гугл. А потом предложил закидать его самого фотками с бдсм-тусовок (за денежку).
vitaly
я порно-луалист
vitaly
Ты тоже порно-спамер : )
да ладно - я человек стесненый в средствах
Snusmumriken
да ладно - я человек стесненый в средствах
Не оправдывайся, я всё про тебя знаю. Это всё из любви к искусству и т.д. тыры пыры.
vitaly
в чате все совершеннолетние на текущий момент?
vitaly
дети вы тут?
vitaly
кому нету 19 лет подымите руки
vitaly
снус ты тут?
Snusmumriken
Я детя, так что не надо тут всего эдакого.
vitaly
все на луа 😂
vitaly
ок - все понял - ухожу - склонившись
Snusmumriken
Давай то же самое но с тестовым роликом, чо
vitaly
вот тебе на русском - прямая трансляция
vitaly
убираю
Snusmumriken
Ууу
vitaly
это “реалтайм детка”
vitaly
или “это реал-тайм, Карл”
Snusmumriken
Реал-тайм, детя, потому что я детя.
Egor
Доброго утра. Такой вопрос, можно ли вытаскивать как-то легко как в питоне значения с table? т.е. x,y,z = {1,2,3} как-то так? а то приходится идти в цикл или вызывать myvar[1] ...
Snusmumriken
unpack: local t = {1, 2, 3} local x, y, z, j, k = unpack(t) print(x, y, z, j, k) --> 1 2 3 nil nil
Snusmumriken
Функция pack - отсутствует, вместо неё конструируем таблицу. Ну там local x, y, z = 1, 2, 3 local t = {x, y, z} Или даже: local t = {1, 2, 3} local copy_t = {unpack(t)} У луа есть неприятная штука, когда мы дёргаем функцию, возвращающую несколько значений, и после неё - ещё что-то. local x, y, z = 4, unpack{1, 2, 3} print(x, y, z) --> 4, 1, 2 local x, y, z = unpack{1, 2, 3}, 4 print(x, y, z) --> 1 4 nil Множественные значения должны быть в "конце" выражения, иначе из них берётся только первое возвращаемое значение. Можно намутить функцию-коллектор, которая собирает все значения, а потом высвобождает, типа: local function collector(temp) local storage = temp or {} return function(...) for i = 1, select('#', ...) do local v = select(i, ...) table.insert(storage, v) end end, storage end -- Usage: local args, temp = collector() args(1, 2, 3) args(unpack{4, 5, 6}) args(7) print(unpack(temp)) --> 1 2 3 4 5 6 7 Соответственно, функция select неплохо работает с множественными значениями. Типа print(select(2, 'foo', 'bar')) --> bar А '#' вместо числа - указывает количество аргументов: print(select('#', 'foo', 'bar')) --> 2 А всё потому, что у луа есть скрытый тип данных touple.
Snusmumriken
Снусу стало грустно читать книжки на английском постоянно лазая в гугл-транслейтор, так что он накалякал консольный переводчик об гугл. Даже goto есть!
Snusmumriken
На самом деле, можно извратиться и замутить что-то подобное для вырезанного текста с фреймбуфера: шорткатом выделяем область на экране, из неё каким-нибудь облачным (или предустановленным) OCR'ом вытаскивается текст, отправляется к переводчику и выводится чем-то message_box-подобным. Но это уже сверхкруть и теряется кроссплатформа (нужно и winapi для выдирания картинки с экрана, и что-то аналогичное линуксовое). Чот скопился миллиард таких тулзов. Ну там, калькуляторы/искатели инфы для компутерных игрушек и не только.
Snusmumriken
вот бы ещё ты научился постить код ссылками на gist, а не скриншотами :)
Только на pastebin https://pastebin.com/dZBN0A9j Свой ключ разработчика не дам, там бесплатно только 1кк символов "на перевод" в месяц (дальше 20 баксов/лям), а мне ещё книжки читать. urlencode - тут: https://pastebin.com/LTPEXVdc
mva
да я и не просил :)
mva
это-то дело я обычно через таблицу config делаю :)