Иван
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
подскажите пож какой то линтер для луа с
Aydar
Anonymous
спасибо
Anonymous
а есть конфиг какой то ? или стандартній использовать ?
Snusmumriken
По умолчанию сыплет варнинги на всё подряд, в настройках есть инструкция, как конфигурировать комментарием в начале луа-файла.
Anonymous
Ребят, а как вызывать конструктор у класса в луа?
Anonymous
Или может будет правильнее : как создать новый элемент типа
Джифорсович
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();
-- ну слишком много описывать и писать.
есть еще какие-то варианты? хочется что бы во время компиляции символьные имена были преобразованны в битовую комбинацию
Snusmumriken
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?
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) это превосходный результат.
Leon174
Snusmumriken
О, кстати да, ребзи уже накатали отладчиков, как-то пропустил.
Vyacheslav
Snusmumriken
Vyacheslav
Vyacheslav
Snusmumriken
Под вендой вроде отладочной фигни нема, линуксовая дев-сборка выдаёт байткод и всякую отладочную фигню.
Snusmumriken
Но можешь таки скопипастить код сюда
https://luajit.me/
Snusmumriken
Насколько можно заметить, оно сворачивает локальные константы в 0. И весь этот цикл кстати тоже сворачивает во что-то около 0, потому что он ничего не делает, хе.
Vyacheslav
Vyacheslav
ну вот у меня-то константы должны быть глобальные
Snusmumriken
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
мне надо что бы было быстро всегда, а не только когда они не забыли
Vyacheslav
почему это?
Snusmumriken
Vyacheslav
на чем еще писать скрипты?
Vyacheslav
свой язык я не хочу делать
Snusmumriken
Сделай тулзу которая собирает C.
Vyacheslav
это все равно не отменяет необходимости разрабатывать свой язык со всем весельем
Vyacheslav
Aydar
почему это?
Может и заметят конечно, но ничего ведь не написано и на юзерах не проверено, выглядит как типичная преждевременная оптимизация
Vyacheslav
Vyacheslav
Aydar
на чем еще писать скрипты?
Всегда есть некий tradeoff либо удобный скриптовый язык либо компилируемый но с максимальной производительностью. Поэтому я не стану ничего советовать.
Vyacheslav
luajit тоже типа компилируемый. только вот как я смотрю там даже операции над локальными константами не оптимизируются. или можно как-то это еще ускорить?
Luсky
Vyacheslav
ну он не компилируемый да и пользователи не в восторге будут.
Vyacheslav
а так-то да, прикольно.
Snusmumriken
Он компилируемо-интерпретируемый )
Luсky
https://github.com/true-grue/fortik
Snusmumriken
Он настолько тупой что ты пишешь за пол часа транслятор форта в машинный код, и вот тебе скомпилированный форт. Сама твоя фиговина может автоматом компилить подаваемые скриптулечки и тут же запускать их как нативную фигню.
Vyacheslav
ну я под компилируемостью еще и оптимизацию подразумеваю.