mihacooper [МСК -2]
mihacooper [МСК -2]
Мне кажется, что заиспользовав объектную абстракцию (условные классы), ты по инерции начинаешь выстраивать каноническую ООП структуру. Единственное "но", что в динамически типизируемых языках это ООП довольно условное.
Snusmumriken
Да пофигу. Если какой-то модуль не укладывается в простую функцию, и эффективнее хранить данные вместе с операциями над ними — мутится ООП, дерево абстракций (глубиной 3-5) и прочая муть.
Если не хочется ООП — можно сбацать миксины или что-то такое.
Лепикоршев
Без привязки к lua - просто с одной стороны, обычный синтаксический сахар таблиц позволяет реализовать что-то способом, похожим на методы ООП.
С другой ооп - это же инкапсуляция, наследование и полиморфизм + дофига менее строгих условий, вроде private, public и protected методов.
Лепикоршев
Вот и интересно, на луа что из каноничного ооп люди используют на практике, а что - академический рудимент, не имеющий применения.
Lucky
Snusmumriken
Snusmumriken
Бюрократические рудименты используются там, где важна бюрократия, то есть в интырпрайзе и прочем мегапафосном софте.
В норме — инкапсуляция работает через соглашение между джентльменами, и чтение документации.
mihacooper [МСК -2]
Лепикоршев
О том и речь) кто какие способы реализации использует.
Кому-то private нужен? Если да, то как используете? Protected? Тот же вопрос)
Например, наследование кому-то хоть раз в луа пригодилось? Или, может, потребовалось настолько, что вы сами вручную его реализовывали?
Лепикоршев
mihacooper [МСК -2]
mihacooper [МСК -2]
Ничего специфического для инкапсуляции не использую
Лепикоршев
mihacooper [МСК -2]
Snusmumriken
Наследование — полезное. Но только до определённой глубины, пока оно влезает в твою голову. На практике — 2-3 уровня наследования — максимум.
Lucky
mihacooper [МСК -2]
Лепикоршев
mihacooper [МСК -2]
Эм, чего именно нет?)
Ну нет системы типов как в статических языках. Статичкой проверки интерфейсов, доступности полей, и т.п.
Лепикоршев
mihacooper [МСК -2]
Snusmumriken
А мне норм : )
mihacooper [МСК -2]
Лепикоршев
Snusmumriken
Лепикоршев
Лепикоршев
Вот я выше ответил снусу, там мое мнение на это счёт)
Т. Е. Просто прописать, как всем командам работать с кодовой базой? Без того, чтобы прятать реализацию инкапсуляция за private/public/protected? Без перегрузок там, где можно обойтись без них? Без управления наследованием на больших объёмах объектов?
mihacooper [МСК -2]
Метатаблицу все-таки не за бесплатно работают. Думаю Снус даже знает какие нибудь цифирьки на этот счет
Лепикоршев
А есть сравнение производительности метатаблица с обычными? Черт, это интересно ^_^
mihacooper [МСК -2]
Лепикоршев
Лепикоршев
Чем вообще одна таблица с метатаблицей будет отличаться от двух метатаблиц?
Лепикоршев
Никогда не пытался просто пересчитать накладные расходы. Типа, это же базовый механизм языка, он не может стоить много
mihacooper [МСК -2]
mihacooper [МСК -2]
Лепикоршев
Ну а две таблица перебрать - будет ли разница?
Лепикоршев
local a = setmetastable( {}, {key="value"})
local b, c = {}, {key="value"}
Будет ли разница в производительности между:
print( a.key)
и
print( b.key or c.key)?
Лепикоршев
Если нет, то метатаблица будет удобнее в организации кода, нет?
Лепикоршев
* Имел ввиду
local a_ = {key="value"}
a_.__index = a_
local a = setmetastable( {}, a_)
Snusmumriken
mihacooper [МСК -2]
mihacooper [МСК -2]
Интересно как jit оптимизирует работу с метатаблицами
Snusmumriken
Просто удаляет нафиг все промежуточные шаги переходов, и сразу возвращает найденное.
Anonymous
@Snusmumriken вопрос, если знаешь ответ
Вот тут pcall load в зашифрованном скрипте находится сверху, но когда я шифрую, то pcall load снизу. Вопрос: в чём преимущества или почему? Если нужен этот скрипт могу скинуть
Snusmumriken
Потому что это байткод. Он прямой и развёрнутый, в отличии от твоего кода. Это просто лента инструкций для виртуальной машины.
Anonymous
Igor
И байткод != шифрование, кстати
Anonymous
Igor
Байткод - это то, что создаёт виртуальная машина из кода, понятного человеку
Igor
Она его создаёт из любого скрипта, который ты передаёшь. Если скармливаешь сразу ей байткод, то этот шаг пропускается.
Igor
Это тот же самый твой код, но в виде, понятном программе. Вот, так понятнее будет.
Anonymous
Вот, тут же зашифрованный скрипт
Igor
Повторяюсь, это не шифрование
Snusmumriken
😅 можно немного развёрнутее? Не понятно что-то
Представь что тебе надо развернуть такой код в список инструкций:
function foo(v)
return v + 20
end
function bar()
print(foo(10))
end
bar()
Прямые инструкции будут выглядеть примерно так:
*псевдобайткод*
goto bar, call
goto foo, call, 10
return 10 + 20
goto print, call 30
Последовательно и развёрнуто
Snusmumriken
Ну вот у тебя весь скрипт запускается в pcall — и это первое что нужно сделать виртуальной машине, запихнуть всё в pcall, поэтому оно в начале файла.
Anonymous
Snusmumriken
С другой стороны, это больше похоже на заголовок байткодовой фигни, типа "список имён используемых функций + метки". Надо лучше разобраться в луёвом байткоде.
Лепикоршев
Не очень понял, два разных интерпретатору сравнивают я на одной и той же задаче?
Snusmumriken
Тут разные версии луажыта, не обращай внимания, это для форумного поста.
Snusmumriken
Основное сравнение — скорость наследований разного рода с жытом и без. Жит скрадывает совершенно любую вложенностью, кстати, если трасса таки разогрелась. Он буквально удоляет промежуточные шаги, сколько бы их ни было.
Лепикоршев
Snusmumriken
Нет, будет точно такой же. Не быстрее, не медленнее, а просто такой же.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
@Snusmumriken Help me
Snusmumriken
No
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
I want ask
Snusmumriken
Google it.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
empty
Snusmumriken
Moar
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Ivan
It is ok to ask even simple questions on stackoverflow.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
print("100")
How To Read 100 only ?
Use String.find