Antontsue
передавать в ф-ию один инстанс этого объекта как базовый клас
Snusmumriken
Да, можно и ООП. Но оно не такое быстрое как линейный код. Конкретно тут - векторы для неимоверной производительности, и даже ffi использовано, для особо быстрой работы.
Antontsue
методы получения из него данных завиртуалить
Antontsue
Antontsue
говнокодом!
Antontsue
=)
Snusmumriken
Ты глянь-то. Там есть ООП. Просто максимально быстрое, с минимумом поисков и переходов по ссылкам.
Snusmumriken
P.S. Завернуть говнокод в ООП - лишь чуть сложнее чем в линейном коде )))
Antontsue
то что я описал это не говнокод
Antontsue
это инкапсуляция реализации
Snusmumriken
Ну, понимаешь ли в чём проблема. Лично я не буду использовать такой подход в хайлоаде, ибо это замедляет исполнение программы. Когда тебе нужно держать приемлемый fps на 300к объектах с кучей векторных операций над каждым - хочешь не хочешь а будешь оптимизировать всё до усрачки :3
Snusmumriken
Тот случай, когда читаемость < производительность.
Snusmumriken
Кстати, всё более чем читаемо.
Antontsue
вы с таким количетсвом объектов в луа работаете?
Snusmumriken
О да. Я ещё пишу хайлоад-серверные приложения на луа, с 1.5-2млн запросов в секунду.
Antontsue
мне кажется я нашел проблему)
Snusmumriken
И знаешь в чём прекол? Luajit.
Antontsue
я бы в нативную часть выносил хайлоад, но это конечно уже поздно делать
Snusmumriken
Luajit'а достаточно для всей фигни.
Antontsue
а jit гарантирует отсутсвие кешмисов?
Antontsue
я просто хз насколько он кеш-френдли код генерит
Snusmumriken
Ну, раз его юзает мыло в веб-хайлоаде, подозреваю что да ))
Snusmumriken
На моей памяти - жутко стабильная штука, плюс самая быстрая виртуалка для скриптов на текущий момент. V8 может в чём-то уже опережает, но несильно, и в жыте гарантированное отсутствие оверхеда на дёргание c/c++ либ.
Antontsue
подозрительно все это
Snusmumriken
Тебе это может показаться выжиганием сахарных сердечек на торте паяльником (т.е. долго, дорого и болезненно), но фигня в том, что луа-код быстрее писать и проще отлаживать, а работает (jit) незначительно медленнее сишки.
Antontsue
нет мне кажется тчо это какбе вилами на воде писано. почему? потомучто люди рендер пишут или тулы игровые и боятся функции виртуалить и иф лишний написать, все о кешмисах парятся, стараются мемори-френдли писать, без дыр в памяти, на с++, разыменовывают не больше одго раза, а тут такой luajit - на скриптовом языке пиши как хочешь, а они не знают про него, мучаются
Snusmumriken
Хе-хе-хе-хе-хе :3 Простите, не удержался.
Antontsue
¯\_(ツ)_/¯
Snusmumriken
Попробуй zerobrane.
Antontsue
вопрос на миллион да
Antontsue
дебажить логами становится тяжело)
Snusmumriken
https://studio.zerobrane.com/
Antontsue
мне товарищь порекомендовал zerobrane
Anonymous
Попробуй zerobrane.
есть что-то по лучше
Antontsue
ага но для этого надо собрать luaSocket в проек
Anonymous
на эклипсе
Antontsue
а на винде он аутдейтед
Snusmumriken
Ну, я дебажу логами и юниттестами в notepad++, за пару годочков привык. Какой тебе luasocket? Берёшь luarocks и ставишь произвольные либы.
Snusmumriken
Могу закидать тебя вендовыми либами, их море. Или ты сам можешь заграбастать: https://luapower.com/ https://github.com/rjpcomputing/luaforwindows
Antontsue
luarocks это не то. это только менеджер. а чтобы код модуля запустился ты при сборке должен функции собрать натиыне чтобы луа к ним подключался
Anonymous
на эклипсе
Lua Development Tools (LDT)
Snusmumriken
luarocks это не то. это только менеджер. а чтобы код модуля запустился ты при сборке должен функции собрать натиыне чтобы луа к ним подключался
Это менеджер, к которому ты подрубаешь mingw/vs, с сурцами интересующей тебя версии луа в инклюде, и этот же менеджер сам компилит. Знай себе, luarocks install luasocket дёргай. А потом копируешь бинарь либы куда тебе надо, и прописывай в package.cpath его местоположение чтобы в require дёрнуть.
Anonymous
а еще майкрософт запилили поддержку лувы в студии
Antontsue
что проще получается - всех заставить поставить и настроить или зашить нужные модули в проект чтоб у всех просто заработало?
Snusmumriken
Папочка libs в проекте, со структурой: x86: lib.dll; lib.so; x64: lib.dll; lib.so; arm: lib.dll; lib.so; В зависимости от оси, пихаешь в package.cpath ту или иную папку.
Snusmumriken
Ну да, или зашиваешь и линкуешь, тоже можно. Благо сурцы либ есть на гитхабе.
Snusmumriken
Да, ты знаешь почему я ещё так активно использую lua в том числе в хайлоаде? Как раз из-за портабельности и отсутствии необходимости в перекомпиляции под новую платформу. Только луароксом либы подгрести, или заранее скомпилить всё чем бы пользуешься под все основные платформы/разрядности, и линковать в рунтайме папку с этими либами в зависимости от текущей платформы. Это как ifdef IOS, только подгребается папка. Ну да, тут десктопные/серверные приложения, в основном. Но даже на ведроиде всё ок.
Snusmumriken
И да, такая конструкция без каких либо изменений будет работать везде, если запускают через виртуалку.
B
как избавиться от .0 в числах, только что б все было целенькое и красивенькое при выводе в консоль? это важно😆
B
без применения math
B
(или форматирования)
Snusmumriken
Для вывода в консоль - print(('Data: %2.2f, %2.4f, %-0.2f'):format(0.0123123123, 0.01234123, 2.1234123))
Snusmumriken
Форматирование чем не угодило? :3
B
ну у меня просто такие задвиги, временами бывает, вот хочу но без всего что б
Anonymous
без применения math
конверть в строку и отбрасывай лишнее
B
ну это да, а так что б совсем
Anonymous
что совсем?
Snusmumriken
formatted = tostring(number):match'(.*)%.?'
Tverd
("%i"):format(i)
Snusmumriken
Тут товарищ без форматирования хочет :3
Tverd
боюсь не выйдет такой трюк ) тут double to int отсутствует
B
у меня к примеру что то : x = x - (x % 1) а потом убрать .0
Tverd
хотя конечно можно подумать
Snusmumriken
Ой всё, форматирование эффективнее :3
Tverd
а через луаджит нельзя? допустим описать структуру с int, туда пихнуть значение и забрать
Snusmumriken
Можно. int = ffi.new('int') int = 123123.123123123 -> 123123
Tverd
о, отлично, хотя бы для луаджит возможно
Snusmumriken
Луаджит умеет всё что умеет сишка. Даже стандартная сишкина либа уже подрублена.
Snusmumriken
http://luajit.org/ext_ffi.html
Ilia
Есть кто lapis-ом пользуется?
Snusmumriken
Только openresty в голом виде. И для очень простых задач.
Antontsue
что значат ппараметры в скобках?
Yogurt
Заикается
Antontsue
тот пример тоже не работает вот в таком случае
Antontsue
вот это работает норм
Antontsue
Quest = Class('Quest', EventListener) function Quest:init(body) local o = self.Super() o.condition = nil o.body = body o.co = coroutine.create(body) return self.Inst(o) end