@ProLua

Страница 72 из 307
Snusmumriken
05.04.2017
13:07:22
Ты глянь-то. Там есть ООП. Просто максимально быстрое, с минимумом поисков и переходов по ссылкам.

P.S. Завернуть говнокод в ООП - лишь чуть сложнее чем в линейном коде )))

Антон
05.04.2017
13:08:16
то что я описал это не говнокод

это инкапсуляция реализации

Google
Snusmumriken
05.04.2017
13:09:54
Ну, понимаешь ли в чём проблема. Лично я не буду использовать такой подход в хайлоаде, ибо это замедляет исполнение программы. Когда тебе нужно держать приемлемый fps на 300к объектах с кучей векторных операций над каждым - хочешь не хочешь а будешь оптимизировать всё до усрачки :3

Тот случай, когда читаемость < производительность.

Кстати, всё более чем читаемо.

Антон
05.04.2017
13:11:00
вы с таким количетсвом объектов в луа работаете?

Snusmumriken
05.04.2017
13:11:05
О да. Я ещё пишу хайлоад-серверные приложения на луа, с 1.5-2млн запросов в секунду.

Антон
05.04.2017
13:11:23
мне кажется я нашел проблему)

Snusmumriken
05.04.2017
13:12:02
И знаешь в чём прекол? Luajit.

Антон
05.04.2017
13:12:04
я бы в нативную часть выносил хайлоад, но это конечно уже поздно делать

Snusmumriken
05.04.2017
13:12:22
Luajit'а достаточно для всей фигни.

Антон
05.04.2017
13:12:43
а jit гарантирует отсутсвие кешмисов?

я просто хз насколько он кеш-френдли код генерит

Snusmumriken
05.04.2017
13:13:27
Ну, раз его юзает мыло в веб-хайлоаде, подозреваю что да ))

На моей памяти - жутко стабильная штука, плюс самая быстрая виртуалка для скриптов на текущий момент. V8 может в чём-то уже опережает, но несильно, и в жыте гарантированное отсутствие оверхеда на дёргание c/c++ либ.

Google
Антон
05.04.2017
13:15:03
подозрительно все это

Snusmumriken
05.04.2017
13:15:55
Тебе это может показаться выжиганием сахарных сердечек на торте паяльником (т.е. долго, дорого и болезненно), но фигня в том, что луа-код быстрее писать и проще отлаживать, а работает (jit) незначительно медленнее сишки.

Антон
05.04.2017
13:18:55
нет мне кажется тчо это какбе вилами на воде писано. почему? потомучто люди рендер пишут или тулы игровые и боятся функции виртуалить и иф лишний написать, все о кешмисах парятся, стараются мемори-френдли писать, без дыр в памяти, на с++, разыменовывают не больше одго раза, а тут такой luajit - на скриптовом языке пиши как хочешь, а они не знают про него, мучаются

Snusmumriken
05.04.2017
13:19:18
Хе-хе-хе-хе-хе :3 Простите, не удержался.

Антон
05.04.2017
13:19:37
¯\_(ツ)_/¯

zk
05.04.2017
13:19:46
Snusmumriken
05.04.2017
13:20:03
Попробуй zerobrane.

Антон
05.04.2017
13:20:03
вопрос на миллион да

дебажить логами становится тяжело)

Snusmumriken
05.04.2017
13:20:34
https://studio.zerobrane.com/

Антон
05.04.2017
13:20:38
мне товарищь порекомендовал zerobrane

zk
05.04.2017
13:20:46
Попробуй zerobrane.
есть что-то по лучше

Антон
05.04.2017
13:20:48
ага но для этого надо собрать luaSocket в проек

zk
05.04.2017
13:20:55
на эклипсе

Антон
05.04.2017
13:20:58
а на винде он аутдейтед

Snusmumriken
05.04.2017
13:21:17
Ну, я дебажу логами и юниттестами в notepad++, за пару годочков привык. Какой тебе luasocket? Берёшь luarocks и ставишь произвольные либы.

Могу закидать тебя вендовыми либами, их море. Или ты сам можешь заграбастать: https://luapower.com/ https://github.com/rjpcomputing/luaforwindows

Антон
05.04.2017
13:22:45
luarocks это не то. это только менеджер. а чтобы код модуля запустился ты при сборке должен функции собрать натиыне чтобы луа к ним подключался

zk
05.04.2017
13:22:53
на эклипсе
Lua Development Tools (LDT)

Snusmumriken
05.04.2017
13:23:47
luarocks это не то. это только менеджер. а чтобы код модуля запустился ты при сборке должен функции собрать натиыне чтобы луа к ним подключался
Это менеджер, к которому ты подрубаешь mingw/vs, с сурцами интересующей тебя версии луа в инклюде, и этот же менеджер сам компилит. Знай себе, luarocks install luasocket дёргай. А потом копируешь бинарь либы куда тебе надо, и прописывай в package.cpath его местоположение чтобы в require дёрнуть.

Google
zk
05.04.2017
13:23:48
а еще майкрософт запилили поддержку лувы в студии

Антон
05.04.2017
13:24:44
что проще получается - всех заставить поставить и настроить или зашить нужные модули в проект чтоб у всех просто заработало?

Snusmumriken
05.04.2017
13:25:58
Папочка libs в проекте, со структурой: x86: lib.dll; lib.so; x64: lib.dll; lib.so; arm: lib.dll; lib.so; В зависимости от оси, пихаешь в package.cpath ту или иную папку.

Ну да, или зашиваешь и линкуешь, тоже можно. Благо сурцы либ есть на гитхабе.

Да, ты знаешь почему я ещё так активно использую lua в том числе в хайлоаде? Как раз из-за портабельности и отсутствии необходимости в перекомпиляции под новую платформу. Только луароксом либы подгрести, или заранее скомпилить всё чем бы пользуешься под все основные платформы/разрядности, и линковать в рунтайме папку с этими либами в зависимости от текущей платформы. Это как ifdef IOS, только подгребается папка. Ну да, тут десктопные/серверные приложения, в основном. Но даже на ведроиде всё ок.

И да, такая конструкция без каких либо изменений будет работать везде, если запускают через виртуалку.

Vlad
05.04.2017
14:12:07
как избавиться от .0 в числах, только что б все было целенькое и красивенькое при выводе в консоль? это важно?

без применения math

(или форматирования)

Snusmumriken
05.04.2017
14:13:16
Для вывода в консоль - print(('Data: %2.2f, %2.4f, %-0.2f'):format(0.0123123123, 0.01234123, 2.1234123))

Форматирование чем не угодило? :3

Group Butler [beta]
05.04.2017
14:13:37
Добро пожаловать в чат pro.lua, Sam! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Vlad
05.04.2017
14:14:15
ну у меня просто такие задвиги, временами бывает, вот хочу но без всего что б

zk
05.04.2017
14:15:02
без применения math
конверть в строку и отбрасывай лишнее

Vlad
05.04.2017
14:15:32
ну это да, а так что б совсем

zk
05.04.2017
14:15:50
что совсем?

Snusmumriken
05.04.2017
14:15:51
formatted = tostring(number):match'(.*)%.?'

Tverd
05.04.2017
14:16:05
("%i"):format(i)

Snusmumriken
05.04.2017
14:16:21
Тут товарищ без форматирования хочет :3

Google
Tverd
05.04.2017
14:17:00
боюсь не выйдет такой трюк ) тут double to int отсутствует

Vlad
05.04.2017
14:17:07
у меня к примеру что то : x = x - (x % 1) а потом убрать .0

Tverd
05.04.2017
14:17:46
хотя конечно можно подумать

Snusmumriken
05.04.2017
14:18:06
Ой всё, форматирование эффективнее :3

Tverd
05.04.2017
14:19:21
а через луаджит нельзя? допустим описать структуру с int, туда пихнуть значение и забрать

Snusmumriken
05.04.2017
14:20:39
Можно. int = ffi.new('int') int = 123123.123123123 -> 123123

Tverd
05.04.2017
14:23:08
о, отлично, хотя бы для луаджит возможно

Snusmumriken
05.04.2017
14:23:28
Луаджит умеет всё что умеет сишка. Даже стандартная сишкина либа уже подрублена.

Admin
ERROR: S client not available

Snusmumriken
05.04.2017
14:23:37
http://luajit.org/ext_ffi.html

Ilya
05.04.2017
16:30:44
Есть кто lapis-ом пользуется?

Snusmumriken
05.04.2017
16:53:44
Только openresty в голом виде. И для очень простых задач.

yegorf1
05.04.2017
18:38:36
Заикается

Philipp
05.04.2017
18:39:53
А что з-з-значат п-п-параметры в скобках? (сглатывает)

Антон
05.04.2017
19:00:19
тот пример тоже не работает вот в таком случае

вот это работает норм

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

вот это крашится

Google
Антон
05.04.2017
19:01:05
Quest = Class('Quest', EventListener) function Quest:init(body) local o = self.Super() o.condition = nil o.body = body o.co = coroutine.create(o.body) return self.Inst(o) end

тоесть если мембер вариабл вызывать то краш

[string "Scripts/Quests/questLogic.lua"]:38: attempt to call a nil value (field 'condition')

делаю так: function Quest:interrupt(condition) print('condition', condition) self.condition = condition coroutine.yield() end -- вызываю так: local condition condition = function (a) print('coroutine condition print') return 'success' end print('coroutine condition', condition) quest.interrupt(condition) выводит: coroutine condition function: 0x218df60 condition nil

она получается не передается в функцию

как такое возможно

https://www.lua.org/cgi-bin/demo

тут тоже самое выдает

о нашел - двоеточие надо было поставить

йоу а как делать множественное наследлвание?

или вы юзаете дак-тайпинг?

Snusmumriken
06.04.2017
00:58:50
Множественное наследование - это вместо таблицы в __index - функция, которая перебирает ключи классов. И это медленно и стрёмно. Даже не думай никогда о множественном наследовании.



Проще уж миксины, делаются аналогично: в __index - функция, перебирающая миксины и один наследуемый класс. Миксины - маленькие таблички с небольшим набором методов. Я могу такое сделать, но всё равно будут большие косяки со многими вещами. Особенно с отладкой.

Рома
06.04.2017
01:23:08
Хм, и чем тогда "множественное наследование" отличается от миксинов? Вовсе и не стремно, функцию __index специально придумали, чтобы всякие javascript'ы завидовали

Tverd
06.04.2017
07:42:51
Множественно наследование может иметь множество инициализаторов... которые надо проходить в момент создания объекта... Миксины обычно без инициализаторов

Антон
06.04.2017
09:42:37
хорошо, а если вариант с одним предком и множеством интерфейсов?

надо указать что объект реализует какие-то функции, ну например есть интерфейс EventListener, у него есть метод OnEvent(). есть EventDispatcher с методом addListener, в который передается инстанс EventListener-а - так как мваров там не надо, до хватит и формальной реализации протокола - EventDispatcher будет вызывать метод OnEvent()

Tverd
06.04.2017
09:46:12
Ну вот миксины считай что-то типа интерфейсов

Антон
06.04.2017
09:46:25
а приведи пример

вот есть MyObject = Class()

Страница 72 из 307