Иван
Fixed используй.
Microvolnovka
Вот только что нагуглил пример на Си для вычисления эпсилон In lua: function macheps() local e = 1.0 while (1.0 + e / 2.0 > 1.0) do e = e / 2.0 end return e end
Anonymous
подскажите пож какой то линтер для луа с
Anonymous
спасибо
Anonymous
а есть конфиг какой то ? или стандартній использовать ?
Snusmumriken
По умолчанию сыплет варнинги на всё подряд, в настройках есть инструкция, как конфигурировать комментарием в начале луа-файла.
Anonymous
Ребят, а как вызывать конструктор у класса в луа?
Anonymous
Или может будет правильнее : как создать новый элемент типа
Anonymous
Луа разве так умеет?
Да, я уже разобрался type:new(arg)
Snusmumriken
Ребят, а как вызывать конструктор у класса в луа?
Обычно делается через какую-то функцию вроде type:new(args), если прописали метаметод - можно дёргать type(args) или, если автор библиотеки извращенец - type:create(args), type:init(args) или что-то такое. В терминальном случае — local obj = table.copy(obj_prototype). И это всё не нормировано, смотри конкретные библиотеки.
fgntfg
Это обман, чтобы набрать классы
Vyacheslav
а как лучше (с т.з. производительности) сделать символьную установку флагов? ну т.е. то что в сях делается как set_flags(SYN|ACK), где SYN и ACK описаны через define. делать через set_flags(FLAGS.SYN|FLAGS.ACK) не хочется, т.к. это будет два поиска в таблице FLAGS. set_flags_syn(); set_flags_ack(); -- ну слишком много описывать и писать. есть еще какие-то варианты? хочется что бы во время компиляции символьные имена были преобразованны в битовую комбинацию
Vyacheslav
нет. да и какая разница?
Snusmumriken
Для сокращения "поисков по таблицам", которое на самом деле не нужно, оно как правило достаточно быстро ищется — кешируешь значения рядом. local FSYN = FLAGS.SYN local FACK = FLAGS.ACK function foo() set_flags(FSYN, FACK) end Если какие-то флаги изменяются в процессе исполнения — кешировать не стоит.
Vyacheslav
это будет кмк так же по производительности т.к. странслируется в поиск в локальной таблице символов FSYN и FACK
Snusmumriken
Нет.
Snusmumriken
Какой стоит интерпретатор?
Snusmumriken
5.1? 5.3? Luajit?
Snusmumriken
это будет кмк так же по производительности т.к. странслируется в поиск в локальной таблице символов FSYN и FACK
Но у кеширования есть одна маленькая разница. Когда ты пишешь FLAGS.SYN — интерпретатор PUC Lua ищет имя FLAGS по всем пространствам по очереди, начиная с текущего уровня. Потом находит его в глобал спейсе, потом начинает искать ключ SYN внутри FLAGS. Чем глубже вложенность твоих пространств имён тем больше поисков. В случае кеширования — количество поисков сокращается до фиксированного минимального количества.
Vyacheslav
Snusmumriken
Тогда тебе вообще насрать на это. Когда оно скомпилится — все, абсолютно все лукапы будут занимать O(1) времени. А если оно не компилится — значит это не тот участок на который ты смотришь, где у тебя есть просадки.
Vyacheslav
так и так лукап по таблице O(1), а мне хочется не просто O(1), а прям 0.
Snusmumriken
Используй константы ))
Snusmumriken
set_flags(0x01, 0x02) Не забудь наверху закомментить табличку расшифровки.
Vyacheslav
я не хочу что бы в скриптах писали хексы и смотрели постоянно в вики что це за хуйня-с
Snusmumriken
Тогда делай O(1)
Vyacheslav
а как-то результат работы luajit посмотреть можно?
Snusmumriken
С секундомером.
Vyacheslav
я резкльтирующий код хочу глянуть
Snusmumriken
Тут где-то есть вывод генерированной фигни https://staff.fnwi.uva.nl/h.vandermeer/docs/lua/luajit/luajit_debug.html
Snusmumriken
Но в целом, если хочется O(0), то можно просто слезть с Lua. Тем более что тут всякие сборки мусора, дёрганья оперативки на создание любой таблички или даже самого завалящего массивчика и всё остальное. Это не то что даст превосходную производительность и экономичность, сишка всё контролируется гораздо лучше любого скрипта. Но если тебе достаточно луа для твоих целей — можешь смело прекращать париться, и писать более-менее оптимизированно, но без фанатизма. O(1) это превосходный результат.
Snusmumriken
О, кстати да, ребзи уже накатали отладчиков, как-то пропустил.
Vyacheslav
Тут где-то есть вывод генерированной фигни https://staff.fnwi.uva.nl/h.vandermeer/docs/lua/luajit/luajit_debug.html
unknown luaJIT command or jit.* modules not installed -- это мне надо что-то добставить или нужно luajit 2.1?
Vyacheslav
Snusmumriken
Под вендой вроде отладочной фигни нема, линуксовая дев-сборка выдаёт байткод и всякую отладочную фигню.
Snusmumriken
Но можешь таки скопипастить код сюда https://luajit.me/
Snusmumriken
Насколько можно заметить, оно сворачивает локальные константы в 0. И весь этот цикл кстати тоже сворачивает во что-то около 0, потому что он ничего не делает, хе.
Vyacheslav
ну вот у меня-то константы должны быть глобальные
Snusmumriken
Я про это уже сказал.
Snusmumriken
Если какие-то константы меняются в процессе исполнения — не кешируй их, или кешируй в тот момент когда они активно нужны: FLAGS = { FOO = 00001, -- константы BAR = 00002, BAZ = true, -- логика (изменяемая) BAT = false } ..... -- кешируем где надо флаги битов local FFOO = FLAGS.FOO local FBAR = FLAGS.BAR function foo() -- ща буит мясо с изменяемыми флагами логики, -- кешируем нужные -- которые могли изменяться вне этой функции local FBAZ = FLAGS.BAZ local FBAT = FLAGS.BAT for i = 1, 10000 do if FBAT then getFlag(FFOO, FBAR) end if FBAZ then setFlag(FFOO, FBAR) end end end
Snusmumriken
И всё локальное и сокращаемое луажытом. Офигеть, да?
Vyacheslav
нет, никакие константы меняться не будут, но и кешировать их тоже не вариант.
Snusmumriken
Почему?
Vyacheslav
потому что константы будут в пользовательских скртиптах
Snusmumriken
Ну будут юзеры сами себе кешировать, в чём проблема?
Vyacheslav
пользователю объяснять такие тонкости -- не комильфо
Snusmumriken
А они не заметят
Vyacheslav
мне надо что бы было быстро всегда, а не только когда они не забыли
Aydar
пользователю объяснять такие тонкости -- не комильфо
Пользователь скорее всего не заметит разницы в производительности
Vyacheslav
почему это?
Vyacheslav
на чем еще писать скрипты?
Vyacheslav
свой язык я не хочу делать
Snusmumriken
Сделай тулзу которая собирает C.
Vyacheslav
это все равно не отменяет необходимости разрабатывать свой язык со всем весельем
Vyacheslav
Но можешь таки скопипастить код сюда https://luajit.me/
что-то я не пойму как его [вывод] интерпртетировать.
Aydar
почему это?
Может и заметят конечно, но ничего ведь не написано и на юзерах не проверено, выглядит как типичная преждевременная оптимизация
Vyacheslav
Aydar
это конечно верно. но сколько будет занимать лукап в таблице? 1000 тактов?
Я не мерял, не скажу. А вообще люди такты не считают обычно. Если там не микроконтроллеры какие-нибудь.
Aydar
на чем еще писать скрипты?
Всегда есть некий tradeoff либо удобный скриптовый язык либо компилируемый но с максимальной производительностью. Поэтому я не стану ничего советовать.
Vyacheslav
Я не мерял, не скажу. А вообще люди такты не считают обычно. Если там не микроконтроллеры какие-нибудь.
а я считаю. мне надо получить на круг порядка 30Mrps. а там кроме установки флагов много чего еще будет.
Vyacheslav
luajit тоже типа компилируемый. только вот как я смотрю там даже операции над локальными константами не оптимизируются. или можно как-то это еще ускорить?
Snusmumriken
на чем еще писать скрипты?
https://ru.wikipedia.org/wiki/Форт_(язык_программирования)
Vyacheslav
ну он не компилируемый да и пользователи не в восторге будут.
Vyacheslav
а так-то да, прикольно.
Snusmumriken
Он компилируемо-интерпретируемый )
Luсky
https://github.com/true-grue/fortik
Snusmumriken
Он настолько тупой что ты пишешь за пол часа транслятор форта в машинный код, и вот тебе скомпилированный форт. Сама твоя фиговина может автоматом компилить подаваемые скриптулечки и тут же запускать их как нативную фигню.
Vyacheslav
ну я под компилируемостью еще и оптимизацию подразумеваю.