Lucky
Как теперь политкорректно?
вайттрешлист и ниггалист
Leon174
#000000list и #FFFFFFlist
Arslan
https://github.com/rxi/json.lua Кто нибудь работал с этой либой? Что по скорости и ресурсам?
Igor
Только dkjson и cjson трогал, у первой есть поддержка lpeg
аннлн
а чем cjson не угодил?
Arslan
а чем cjson не угодил?
Сишная либа, я через петон запускаю
Pavel
ребят - есть nginx с lua-шками хочу c некоторой вероятностью включать детальное логирование для запроса. проблема - нужно чтобы логирование либо включалось для всего запроса либо не включалаось. думаю в фазе access_by_lua положить в ngx.var что-то типа math.random(100)<2 и использовать его в контексте всего запроса как признак Насколько это эффективно?
Anonymous
Парни, сорри за тупой вопрос, но: u0026 Какая хто система?
Anonymous
Вернее как это в юникод символ перевести
Highly Likely
Вернее как это в юникод символ перевести
По таблице символов, например :)
Anonymous
Уже разрбрался ,спасибо
Roma
Поэксперементировал как симитировать continue в цикле в lua 5.1. Получился такой вариант: local count = 5 for i = 1, count do repeat if i == 3 then do break end -- simulate continue end print(i) until not i ~= count end Выводит 1,2,4,5. Вопросы: - Почему если поменять not i ~= count на i == count - уже не работает? ) - Почему вообще в until нужно сравнение на одинаковость с count, ведь наоборот же, должно быть until i < count по логике. Но работает почему-то только именно так, иначе зависаем в бесконечном цикле )
Arslan
not i будет возвращать false т.к. за true луа считает все, что не равно nil или false. Получается not i ~= count у тебя все время будет возвращать true
Arslan
Крч проще сделать так: local count=5 for i=1,count do repeat if i==3 then do break end end print(i) until true end end
Roma
Крч проще сделать так: local count=5 for i=1,count do repeat if i==3 then do break end end print(i) until true end end
Понял, я усложнил короче в том месте где нужен простой true
Roma
Не сразу всек в суть, теперь понял что true нам нужен просто чтобы в repeat один раз пройтись. Спасибо.
Roma
Здесь не зачем. Это упрощенный пример.
Yuriy
Ну, субъективно, код типа такого for i=1,10 do if i~=7 continue ... end с continue выглядит чище Чем for i=1,10 do if i==7 then ... end end
Snusmumriken
Ну, субъективно, код типа такого for i=1,10 do if i~=7 continue ... end с continue выглядит чище Чем for i=1,10 do if i==7 then ... end end
В совершенно буквальном и объективном смысле чище, потому что плоский код чище чем вложенный.
Roma
Бывают переборы данных с комплексной обработкой, где нужно это обработку прекратить когда ты понял что это делать не нужно. И это может быть не в самом начале даже. Строить лесенку на пустом месте для кода обработки так себе красота и удобство, особенно если у тебя дальше тоже какие-то локальные обработки. И их тоже нужно будет оборачивать. Можно сказать так: continue не нужен настолько же насколько не нужен break. Т.е. нужен:) потому что если break - это выйти из текущей итерации и прервать цикл полностью, то continue - выйти из итерации, но продолжить цикл. Оба варианта нужны, оба варианта полезны в различных ситуациях, не всегда хочется прекращать цикл.
Roma
Короче штука нужная, но именно в Lua ее нет, хотя везде continue есть. Ситуация наоборот с goto, в Lua есть, а остальные языки на это смотрят как на опасный архаизм. Автор языка решил немного отличиться вообщем :) Вот я раньше как раз и оборачивал в if и получалось не очень. Решил ещё раз копнуть в тему и решение получилось с until, которое вполне себе выглядит годным.
Igor
Павел оказался жив на 0%
Arslan
Троянский бот🤣
Игорь
Игорь
Результат опроса, предлагаю, будет предрешён. Мне просто вчера звонили, предложить работу, и помимо прочего начали спрашивать, какой функцией делается то, или иное действие. Я искренне не понимаю, зачем программисту помнить названия функций... Мы же не справочники...
Snusmumriken
В противном случае, мы сталкиваемся с подобными вещами:
Highly Likely
В противном случае, мы сталкиваемся с подобными вещами:
Нет. Первое — выводится логически и достаточно знания того, что искать/гуглить
Highly Likely
Мы справочники, но в довольно узком смысле
Snusmumriken
Нет. Первое — выводится логически и достаточно знания того, что искать/гуглить
Во-первых, поиск-гуглинг на самом деле сжирает очень много времени. Особенно когда задачу нужно выполнить "вчера". Я вот сейчас по работе делаю сервис на основе cef-python, и гуглю очень много, как по cef, так и по фичам питона которых я не помню. И за ~четыре дня работы написал около 200 строчек и всего несколько функций, потому что ещё изучал общую схему работы/перебирал кучу вариантов чтобы оно таки пахало с худо-бедным комфортом. Хотя общие представления о том что это такое и что оно может — есть ))) Этим, собственно, "хороший разработчик" отличается от "фигового" — хороший берёт и пишет (точно зная что будет на входе и выходе), а средне-фиговый идёт гуглить, и неизвестно когда всё таки нагуглит, и не уйдёт ли у него на это три недели вместо двух часов. И уж со стандартной-то библиотекой крайне желательно не филонить. Во-вторых, для того чтобы что-то выводить логически, и знать что гуглить — надо по крайней мере иметь представление об этом, как минимум раза три прочитать эту стандартную библиотеку и попробовать все функции. А то будет как с товарищем из короночата, который хотел реакцию в андроидо-короне на нажатия клавиатурных кнопок в ЛЮБЫХ андроидоприложениях. Он думал что это просто. Оп, а это вообще невозможно и лютое нарушение безопасности, ибо кейлоггинг. А заказчик рассчитывал именно на это, и разрывает контракты и бла-бла. Кароч, знать свои возможности — это очень полезно и ваще. И чем меньше гуглинга на проде, тем лучше.
Snusmumriken
Я немножко загнул со стандартными библиотеками, потому что в тех же плюсах или питонах — полная информация о стандартной библиотеке просто не влезает в голову, и за всю жизнь можно не использовать и половины из них ибо не нужно в твоей области. Но вот прочитать раз пять всё это, и мочь вспомнить, если тебя спросят "что делает эта функция" — весьма пользительно.
Егор
Это другое goto. Вообще совсем другое.
А чем они отличаются? По-моему, в луа есть ограничения что типа нельзя перейти в скоп выше
Snusmumriken
Да, есть ограничения по скопу. Получится скакать только условно в пределах одной функции. В другую функцию не прыгнешь. Совсем кашу не замутишь (или замутишь, но в пределах одной же функции).
Егор
Так не интересно (
Snusmumriken
Так не интересно (
Просто перестань использовать функции, и циклы. Напиши одну функцию main с кучей меток и прыгай между ними.
Snusmumriken
Разумеется. Пришло время писать 3д-игры без функций и циклов на луа + гото ))
Егор
Интересно, насколько гото быстрее/медленнее вызова функции
Snusmumriken
Мне сложно мерять, ибо у меня luajit всё заJIT-ует, и будет скорее всего примерно одинаково. Но вызов функции в целом медленнее. Нужно мутить/переключать контексты с локалками-upvalue, стек пересобачивать и т.д.
Егор
Мне сложно мерять, ибо у меня luajit всё заJIT-ует, и будет скорее всего примерно одинаково. Но вызов функции в целом медленнее. Нужно мутить/переключать контексты с локалками-upvalue, стек пересобачивать и т.д.
Да это ясно, что в си конечно гото будет намного быстрее. Просто может быть, что в луа из-за каких-то особенностей придётся совершать доп действия при гото
Snusmumriken
Я про луа и говорил. У луа есть стек, есть области видимости и прочая переключаемая фигня. На которую пофигу при goto, ибо она не меняется. Максимум — проверка "расположена ли метка в правильном месте"
Егор
Я про луа и говорил. У луа есть стек, есть области видимости и прочая переключаемая фигня. На которую пофигу при goto, ибо она не меняется. Максимум — проверка "расположена ли метка в правильном месте"
Это всё конечно ясно, но если воспринимать интерпретатор как чёрный ящик, то уверенным быть нельзя вообще ни в чём ) Короче да, какую-то фигню подумал
Snusmumriken
Да, можно только взять и померять. Написать фигню с goto, написать фигню с функцией и сравнить. Домашнее задание — сравнить скорость goto и вызова функций в 5.2+ ))
Snusmumriken
Ну время задавать вопросы у тебя есть ))
Snusmumriken
И как будто тут уйдёт больше 10 минут на всё.
Anton
Народ, всем привет! Мы тут себе в команду спеца ищем, может, интересно кому будет поработать над мморпг https://voronezh.hh.ru/vacancy/37439626 Удалёнка
halt
Парни, привет. Подскажите по регулярке... вроде и вопрос плевый, но что то не работает Пример: local s="однажды в студеную зимнюю пору" print(s:match"зимнюю") ищет по одному слову, но так как в s текст всегда разный, мне нужно вылавливать определенные слова - зимний, зимнюю, холодный, дубак и т.д.. Как их указать в регулярке? Уж по всякому пробовал, но не срабатывает что то
Igor
Парни, привет. Подскажите по регулярке... вроде и вопрос плевый, но что то не работает Пример: local s="однажды в студеную зимнюю пору" print(s:match"зимнюю") ищет по одному слову, но так как в s текст всегда разный, мне нужно вылавливать определенные слова - зимний, зимнюю, холодный, дубак и т.д.. Как их указать в регулярке? Уж по всякому пробовал, но не срабатывает что то
Луёвые регулярки так не могут, насколько я помню. За один вызов несколько слов ты не проверишь. Можешь сделать таблицу с словами, которые нужно искать и запускать итерацию по ней, а внутри уже искать слова в строке из таблицы. Вообще можно побуквенно, но это довольно сложно и не всегда подходит.
Lämppi
А сплит и поиск по коллекции не подходит?
Igor
Вывод примерно такой
Lämppi
А сплит и поиск по коллекции не подходит?
Или string.find(...), я прост хз, на луа не пишу
Igor
кстати да, лучше match на find заменить, он побыстрее работает
Igor
да и в данном случае match не нужен, именно в моём примере
halt
Спасибо. Буду разбираться
Timur
смотрю я на то как сниппеты с кодом и с результатами тут присылают, и возник вопрос, а есть ли для Луа аналог Godbolt для Си/Си++/Раст?
Igor
https://luajit.me/
Timur
это то я видел. но в простом виде что-то сильно проще - шарить ссылки с кусками кода и их выдачей.
Timur
но панель с байт кодом разных jitов была бы большим бонусом
Timur
в дополнение к списку на этом сайте у Заварицкого - Тарантул, LuaVela, RaptorJIT
Yaroslav
Если там не секретный код, можешь скинуть, я для саморазвития попробую покопаться
Igor
А почему их должно быть возможно вернуть? Прежде чем утверждать, что что-то звучит как бред, Вам нужно разобраться в том, как работают обфускаторы. При обфускации скрипта происходит замена всех имён переменных (которыми, кстати, также являются и функции) для того чтобы не облегчать жизнь тем, кто хочет деобфусцировать код. Имена переменных заменяются на ничего не значащий набор символов, для интерпретатора такая подмена погоды не меняет, а человеку разобраться гораздо сложнее. Человек, который будет деобфусцировать код может самостоятельно дать названия переменным, исходя из их назначения, но далеко не факт, что они совпадут с теми, что давал оригинальный автор скрипта.
Igor
Igor
Естественно не поддерживает, у LuaJIT байткода другой заголовок и сам байткод нехило отличается. Если нужно именно байткод перевести в Lua-код и больше ничего не делать, то советую посмотреть в сторону https://github.com/DrNewbie/luajit-decompiler
Snusmumriken
Вообще, деобфускация — это довольно неблагодарная фигня.
Igor
Перед использованием желательно очень внимательно прочитать ворнинги
Igor
Вообще, деобфускация — это довольно неблагодарная фигня.
Есть такое. Именно по этому заниматься подобным для чьих-то корыстных целей я бы не стал даже за материальное вознаграждение.
Snusmumriken
Ну вот я глянул декомпилированную фигню, поковырял такой, обнаружил тонну табличек с циферками (которые не преобразуются char'ом во что-то разумное), и такой: ну нафиг )) Конечно, можно запустить повесив хук на _G, но всё равно будет стрёмно.
Roma
Привет ребят. Помогите не написать говнокод ) Есть вот такое: expression:gsub('[[%a_][%w_%.]*', replace) задача найти и подмениить названия переменных значениями, напр: abcd + a123 + _abc + abc_ + ab.cd (да, с точкой тоде надо) на: 1 + 2 + 3 + 4 + 5 Но там же еще бывают... стринги в ковычках! abcd + "Hello!" + "La la la" + "One, two, @#%^#$!" И их надо оставить в покое.
Roma
Так вот внутри них естественно слова тоже попадают в gsub при подмене переменных.
Roma
У меня возникла идея сначала пробежаться с '%b\"', вытащить все строки в масив и заменив в выражении на #1 #2 #3. Потом запустить замену переменных, а потом строки вставить обратно по индексам.