Highly Likely
А, туда я не до листал, соре
Snusmumriken
Не обязательно поиск, например ты такой считаешь динамику изменения цен в постоянно дополняющемся списке, пересчитывая её на каждом изменении.
Highly Likely
Ну карочи да, если у тебя цикл от 1 до N, у тебя время действительно растет линейно с увеличением N
Snusmumriken
Спасибо. Чтото я тут говна хлебнул..... сам справлюсь. Хорошего вечера
Вместо того чтобы жаловаться "говна хлебнул", лучше бы описал свою проблему по-человечески.
Snusmumriken
Ну карочи да, если у тебя цикл от 1 до N, у тебя время действительно растет линейно с увеличением N
Или нелинейно, если подсчёт чего либо зависит от количества элементов, например N циклов от 1 до N, и есть стойкое подозрение что оно примерно так и есть )).
Snusmumriken
Извините, что для вас я был обезьяной
Ты вот прямо сейчас продолжаешь так себя вести. Опиши проблему конкретно и выложи код на пастбин. Опиши "желаемое поведение" и "то что получается".
Highly Likely
Мне кажеца, господину помощь не требуется
Snusmumriken
Я все написал, скрины и код написал, у вас толи чтото случилось...... вообщем желчь прет........ имхо
Никакой желчи. Ты написал "не хочу утечек" но в этом нет никакой конкретики. Опиши нормально. Например "скрипт вот в таких условиях работает N времени и жрёт M памяти, а в таких условиях работает 10N и жрёт 100M памяти". Не забудь приложить (весь) код. Всякие переменные представляющие собой "секрет фирмы" можно скрыть.
Snusmumriken
Андерстандбл?
Snusmumriken
Алсо. Отношение к группе людей (в данном случае к чату) по реакции одного представителя (Белки-истерички) — весьма предосудительное поведение.
Highly Likely
м?
Стоит всего лишь чуток накосячить с метатаблицами…
Snusmumriken
м?
Ну кароч тут ещё наслаивается менеджер памяти ОС, который просто так память приложения не освободит, потому что раз приложение столько затребовало — оно тут же ещё раз может столько же затребовать, не переразмечать же. Поэтому резервируется сразу сильно больше чем оно реально жрёт, а если вдруг не хватает — начинает размечаться ЕЩЁ БОЛЬШЕ, вне зависимости от формального потребления.
UtoECat
Стоит всего лишь чуток накосячить с метатаблицами…
Ммм... Можно по подробнее? Вроде что-то такое фиксили уже в новых версиях... Нет?
Highly Likely
Ммм... Можно по подробнее? Вроде что-то такое фиксили уже в новых версиях... Нет?
А я не уверен. Ну, типа, я не вникал в 5.1+ уже давно. Так шо действительно могу быть неправ
Highly Likely
Может новый гарбажколлектор это и починил
Null
ну, в теории, через метатаблицы можно сделать и чтобы вообще не очищалось 🤷‍♂️
Snusmumriken
Стоит всего лишь чуток накосячить с метатаблицами…
Это может произойти если приложение разрабатывается наполовину на сишной стороне, и к юзердате забыли прицепить __gc который будет чистить уже сишный мусор при очистке от юзердаты на луёвой стороне.
Igor
Накосячить с метатаблицами - это выстрел себе в ногу, так что не считается
Alxius
Сделано на Lua: :Пушка наносит смешной вред 1 и создаёт врага при попадании в стену или другого врага =) https://www.youtube.com/watch?v=bMFbjnJwnYU
Денис
Ок спасибо! попробую. главное чтоб ничего не сломалося😭
Ты наткнулся на то, на что наткнулся я, когда писал биндинг к либе через Alien: выделялся буфер, чтобы MultiByte перегнать в WideChar и обратно, при этом, Alien не располагает метаметодом для закрытия буфера - на коротких тестах память текла, что будь здоров. Потом почитал про GC и понаблюдал в долгой перспективе: все оказывается чистится, только не прямщас, а когда Lua это надо. Так что наблюдай в долгой перспективе. Или забей, если работаешь с чистым Lua. Ну или можно постараться упрощать задачи интерпретатору, используя локальные переменные и для промежуточных результатов в линейном коде используя do end
Alxius
это намеренно сделано )
Null
(и с финализацией того, что под капотом это вообще вендопроблемы)
Денис
то есть, буквально то, о чём ему три раза сказали
Ну, когда ты кодил на сиподобных языках, приходишь такой и охреневаешь от того, что у тебя память раздувается не соразмерно данным, которые ты туда положил - знаешь, это порой очень сильно тебя выпихивает в транс по своим кривым рукам. Так что, если тебе скажут несколько раз, ничего страшного не случится - ты просто поймешь, что не у двух людей такое мнение, а у двадцати двух, соответственно, оно имеет место быть с большей вероятностью)))
Null
зато это должно быстро научить в чём разница между низкоуровневыми языками и высокоуровневыми :)
Денис
🤷‍♂️
Ну, у меня лично было такое. Я уже грешным делом хотел писать либу для работы со строками таки на нативном могучем.
Null
(и в разнице подходов ручной аллокации и деаллокации памяти и надежды на gc ;)
Highly Likely
На этом мы и остановим обсуждение топик-стартера :)
Денис
Оп, а мое сообщение в чате есть? Последнее? Оно у меня куда-то пропало...
Null
Оп, а мое сообщение в чате есть? Последнее? Оно у меня куда-то пропало...
не только оно, админ, который написал выше, дропнул всю подветку :)
Денис
У меня вот до сих пор вопрос по rockspec...
Денис
э?
https://t.me/ProLua/97242
Денис
Там я уже покопался, попытался поустанавливать через raw - вроде запарсилось, но упорно LuaRocks фейлится при попытке склонить репозиторий. А при попытке в LuaRocks засунуть ссылку на гит, оно утверждает, что этот репозиторий не имеет rockspec под мою версию Lua, хотя у меня UTF-8 по Windows CRLF написано: "lua >= 5.1, <= 5.3", И вот я сижу и думаю...
Null
а ты уверен что оно должно работать с https://github.com/outsidepro-arts/AlienTolkLua вместо имени пакета/указания на рокспеку?
Денис
а ты уверен что оно должно работать с https://github.com/outsidepro-arts/AlienTolkLua вместо имени пакета/указания на рокспеку?
Какой-то модуль я именно так и ставил, но задницей чую, что это прошло только потому, что данный камень был на официальном сервере уже заманифестен под версии... Я просто об этом не знал...
Snusmumriken
(и с финализацией того, что под капотом это вообще вендопроблемы)
Не "вендопроблемы" а вообще не проблема. Для оперативной памяти в принципе нормально быть израсходованной на 100%, иначе она используются не рационально кстати. Чистить выгодно только и исключительно когда появляется её нехватка.
Shedory
Здравствуйте, нашел чат по статье на хабре об ООП в Lua
Shedory
не совсем понимаю фишку с self.__index = self, можете пояснить?
Shedory
для меня __index было "если нет нужного поля в данной таблице, искать поле в таблице, указанной __index". Но тогда при self.__index = self по моей логике таблица будет искать несуществующее поле в себе же и его там снова не окажется
Igor
не совсем понимаю фишку с self.__index = self, можете пояснить?
Когда задаешь __index сначала идёт поиск по таблице из этого поля, также туда можно функцию передавать
Igor
Типа ты говоришь объекту, чтобы сначала поле искалось в метатабилце, а потом в самом объекте, если нет в мете.
Shedory
оо, это меняет дело, спасибо!
Igor
оо, это меняет дело, спасибо!
Ой, точнее наоборот, я чет протупил. Сначала в объекте, если там нет, то в мете
Shedory
тогда вопрос все еще актуален. Что дает подобная конструкция и не будет ли ошибки из за попытки обращения к несуществующему полю?
Shedory
в плане не просто nill, а error
Igor
тогда вопрос все еще актуален. Что дает подобная конструкция и не будет ли ошибки из за попытки обращения к несуществующему полю?
Ну смотри, допустим тебе надо создать кучу объектов с одинаковми функциями, создаешь мету с функцией onUpdate допустим и полем __index, которое указывает на саму мету. Создаешь объект с этой метатаблицей и называешь его obj1, допустим. В итоге теперь ты можешь вызвать obj1:onUpdate(), так и с остальными. Но если ты внутри самого объекта создашь функцию onUpdate, то будет уже вызываться она, а не метафункция.
Shedory
в целом кажется разобрался, спасибо еще раз
Snusmumriken
для меня __index было "если нет нужного поля в данной таблице, искать поле в таблице, указанной __index". Но тогда при self.__index = self по моей логике таблица будет искать несуществующее поле в себе же и его там снова не окажется
Там нет self.__index = self, потому что именно это как раз циклическая рекурсия. Достаточно распространённой конструкцией может быть: local MyClass = {} MyClass.__index = MyClass function MyClass:new(x, y) -- переопределение self на новый объект -- для поддержания единообразия, чтобы везде self был новым объектом -- а self в smt это как бы табличка MyClass, и __index у неё MyClass self = setmetatable({}, self) self.x = x self.y = y return self end Эта фигня позволяет на MyClass вешать и методы и метаметоды: function MyClass:area() return self.x * self.y end function MyClass:__tostring() return self.x .. " :: " .. self.y end
Shedory
В статье написано про циклическую рекурсию, но там действительно не self.__index = self. Заставила задуматься книжка Иерузалимски по Lua, в которой как раз такая конструкция
Snusmumriken
Ну так я писал статью, лол кек.
Snusmumriken
Надо бы её переписать для понятности, потому что вот эти --[[8]] не очень для восприятия.
Александра
Ребят, что посоветуете для новичка? Где черпать знания?
Александра
нет
Tony
Смотря как и с какой целью вы применяете язык
Mike_Went
xD
Mike_Went
действительно спам.
Mike_Went
забаньте её уже.
Aydar
нет
"Программирование на языке Lua" хорошая книга
Andrew
Ребят, что посоветуете для новичка? Где черпать знания?
В документации движка Defold хорошая краткая справочная информация по Lua
Null
нет
почему?
Aydar
почему?
Как минимум она на инглише и к тому же это референс а не учебник.
Null
Как минимум она на инглише и к тому же это референс а не учебник.
во-первых, в оригинале всегда лучше переводов, так что "на инглише" это не недостаток во-вторых, перевод есть в-третьих, в официальной документации есть ссылка на PIL
Null
(ну и в-четвёртых, лично мне хватило и официальной документации, без PIL, для изучения с нуля. не знаю, что мешает другим 🤷‍♂️)