Sam
Хех.
Sam
Ivan
не могу не вспомнить чудесный xkcd про floating point =)
Ivan
Highly Likely
Ivan
Не так давно видел исследование что программисты в основном не понимаю floating point https://users.cs.northwestern.edu/~pdinda/Papers/ipdps18.pdf
Ivan
Главное знать что в этом представилении число 0.1 плюс число 0.2 не равно числу 0.3
(смешной сайтик про это https://0.30000000000000004.com/ )
Highly Likely
Highly Likely
И держать в голове то, что в них есть ошибка после n-го символа
Highly Likely
Этого достаточно, чтобы чаще всего не отстрелить себе ногу
Highly Likely
Лепикоршев
я уже запарился😢
Не знаю, актуально ли, но:
1. Когда ты создаёшь lamp.__index = lamp; и setmetatable( x, lamp ) ты делаешь возможным поиск по lamp, опредедённый внутри же lamp, как в метатаблице твоей таблицы.
Только поиск, больше ничего.
2. А когда ты делаешь { __index = lamp }, ты делаешь поиск по таблице lamp, а вот метатаблица у тебя будет другой - той, которую ты создал.
Snusmumriken
В общем-то пофигу.
Snusmumriken
Функции дают больше возможностей (множественные наследования, "приватные" свойства и всякая такая дичь). Таблички — побыстрее. Но в норме, мы не особо паримся о скорости, не-так-часто-вызываемые объекты могут быть какими угодно.
Snusmumriken
Так что просто не цепляем к частовызываемой фигне (векторы-матрицы, например) методы с функциями.
Лепикоршев
Я некоторые вещи сразу оцениваю через O(n), чтобы потом не мучиться от болей в простреленном колене =)
Snusmumriken
Сделай функцию __index со сложностью O(n) (т.е. O(1)), и не парь моск ни себе ни другим : )
Лепикоршев
Таблица быстрее, ты сам доказал =) Так что функции - для редких исключений ;)
Snusmumriken
Ты не очень "впопад" сказал про сложность, потому что тут шо таблица шо функция — оба в норме имеют примерно одинаковую сложность, и не зависят от кол-ва элементов чего либо. Просто табличка чутка быстрее, но независимо от количества чего либо.
Лепикоршев
Время обработки будет различаться почти вдвое, если у тебя __index = {} относительно __index = function()end
Snusmumriken
Ох, основную часть времени будет сжирать всё-таки не поиск метода через таблицу или функцию, а его вызов.
Snusmumriken
Оптимизация пяти процентов — глупость.
Лепикоршев
а зачем себе же мину в будущее закладывать? Тратить 5%, когда можно не тратить?
Snusmumriken
Вот если ты точно знаешь что объекты будут вызываться очень часто, а их методы практически не занимают времени — тут нормально оптимизировать, у тебя есть эта информация.
Snusmumriken
Snusmumriken
А так ты сделаешь куда менее удобные интерфейсы чем мог бы.
Лепикоршев
Не соглашусь, если ты это сделал один раз, а потом все метатаблицы этой фабрикой фигачишь. Как говорится, научился летать, долетел за час.
Лепикоршев
Snusmumriken
А неудобство в снижении возможного функционала. Допустим, тебе надо не просто вызывать методы, а ещё записывать это. Можно было бы использовать автоматическое логирование в __index'е, например: что вызывается, с какими аргументами и в каком порядке. А так — ты такой ручками при каждом вызове логируешь, ууу, страшна ))
Snusmumriken
Карочи, цени то что тебе дают больше возможностей, и то что ты можешь выбирать: использовать то или это. А забивание болта на всю ветку потому что "эта медленна" — самая настоящая глупость, я гарантирую.
Snusmumriken
И нет тут никаких мин. Настоящие мины — это немножко другое. Это когда ты такой добавляешь в коллекцию элементы, а они такие, после набора нескольких, внезапно начинают добавляться по полтора часа вместо трёх наносекунд. Вот это — мина. А тут — не мина, а всё тот же условный O(1) ))
Лепикоршев
Лепикоршев
Нельзя сделать универсальный автомат, чем-то всё равно придётся пожертвовать. Но по умолчанию жертвовать временем выполнения... ну, на мой взгляд, так себе идея)
Snusmumriken
Как всегда, вопрос целесообразности. Оно не сожрёт и толики того, сколько сожрано уже другим говнокодом совсем рядом.
Жертвовать 0.005-5% времени выполнения ради комфорта использования и скорости написания/отладки — это нормально и даже хорошо.
Snusmumriken
Удобные апи — стоят того чтобы быть "не самыми оптимизированными в мире"
Лепикоршев
Мм, в данном случае - ты о комфорте программиста?) В чём будет страдать комфорт-то? Напиши один раз, вызывай когда нужно, и только там, где нужен функционал сверх - допиши.
Snusmumriken
Ты экономишь три копейки ради непонятно чего, когда мог бы сэкономить десять рублей, сделав нормальным что-то совсем другое, где у вас настоящие просадки а не эта фигня.
Лепикоршев
"Ну важно, какой процент, важно, с какой суммы" =)
Snusmumriken
Карочи, ты меня понял?
Лепикоршев
Понял. Не согласен ;)
Snusmumriken
Вот и молодец : )
Я долго работал и с тем и с тем, и с "переоптимизированным" лигаси (которое стало лигаси именно из-за преждевременных оптимизаций) тоже, и с супер-удобными апи, которые ценой чуть большего времени исполнения оказывались гораздо лучше чем могли бы.
И первое — это жопа, никто не хочет этим пользоваться, и фичи туда не внедришь.
А второе — конфетка, и все хотят этим пользоваться : )
Лепикоршев
Я чаще вижу обратную картину - и в легаси переходит то, что не справляется с нагрузкой
Snusmumriken
И что ты будешь делать, если встретишься с таким лигаси?
Snusmumriken
То что сделает любой нормальный человек — врубит профилировщик и посмотрит что жрёт больше всего, и глянет где надо ковырнуть, оптимизировав маленький кусочек кода, занимающий 80% времени.
Если проблематично — увы, переписывание под новые требования.
Лепикоршев
Мм, у меня такое чувство, что мы про какие-то разные штуки начали говорить.
Snusmumriken
Я говорю про крупные системы которые пишутся не одним человеком, где как раз часто встречаются проблемы оптимизации, потому что кто-то натыкал "работает и ладно".
Snusmumriken
Но, всё о чём я тебе втолковываю — не ударяться в крайности и действовать по ситуации. Ты никогда не напишешь худо-бедно объёмного кода, работающего с предельной скоростью, но ты потратишь кучу времени своей собственной жизни (которая у тебя одна, межпрочим) в перекапывании своих же "ненужных оптимизаций" в будущем, когда что-то сломается или понадобится новая фича.
Вся работа программиста — баланс комфорта использования и будущей поддержки со скоростью исполнения.
Нет какого-то шаблона "как делать", потому что ситуации разные. В противном случае, программиста можно было бы заменить на оптимизирующий компилятор, которому говоришь: "хочу чтобы было зашибись", и он такой делает зашибись ))
А ты загоняешься в крайность, как самый настоящий ситх, возводящий всё в абсолют ))
Snusmumriken
Карочи, в __index как в функции нет ничего плохого, оно есть, оно приемлемо работает, просто учитываем что оно линейно чуть медленнее чем табличка, и не ставим её на сверхзагруженные объекты, где профит от быстрого поиска методов будет играть хоть какую-то роль.
Lucky
Ух ты, сталкеристы в чяти!
Anonymous
Делайте на них репорты сразу
Snusmumriken
Уточнение: репорты на спамеров, не на сталкеристов
Igor
Сталкеристы тоже народ особенный
Igor
Нелюдимые какие-то
Yuriy
Насколько здоровая мысль - "написать Android приложение полностью на Lua"?
Делают ли коммерческие проекты на Lua под Android?
Highly Likely
Ivan
Yuriy
Спасибо😊
Anonymous
Yuriy
А что можете сказать про Gideros?
🐅🤦♂️
🤷♀
Mikhail
Зачем вообще игры
Highly Likely
Напоминаю, что мы очень неприветствуем такого рода выражения и поведение. Первое и последнее предупреждение.
Anonymous
Всем привет
Anonymous
Народ, выручайте советом)
Anonymous
Не могу исправить никак ошибку в скрипте под Game Guardian
Anonymous
Вообщем сбой в этом моменте:
Мне нужно из адресса получить значение:
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Как бы раньше я делал так:
local ch1 = tonumber((st2[a].address)-2^32)
Anonymous
И ch1 уже получалось нужное значение
Anonymous
Как правильно переобразовывать адрес в число?