Lucky
Иван
Lucky
https://github.com/luavela/luavela/blob/master/docs/public/pub-faq.rst
Lucky
По русски - фигвам.
Lucky
Тому що нэма у пана атамана золотого запасу.
Alxius
Lucky
Anonymous
Хохольский буржуй
Arslan
Немного чат перепутал
кота
Anonymous
Ахах
Иван
Почему производительность Луа машины падает после рекурсивного Фибоначчи от 32-х?
Иван
Т.е. после fib(32) падает производительность
Snusmumriken
Может быть, потому что без мемоизации?
Snusmumriken
Потому что глубина стека? Потому что не стоит вычислять фибоначчи рекурсивно?
Snusmumriken
И вообще, чем меньше рекурсии в твоей жизни (особенно N^2) тем лучше?
Anonymous
Snusmumriken
@otvet148 здарова, задавай вопрос-ответы )
-
Привет! Создаю небольшую аркадную игру в рамках курса. Возникли проблемы с хп-баром. Нужен репетитор по этому вопросу, который мог бы выделить время для связи
-
Создаю в love
Snusmumriken
А что с хп-баром? Рисовать полосочку?
Snusmumriken
function drawBar(x, y, w, h, amount, max)
love.graphics.rectangle("line", x, y, w, h)
-- процент полоски умножаем на ширину
local hp_w = amount / max * w
love.graphics.rectangle("fill", x, y, hp_w, h)
end
-
Да, она должна все время уменьшаться и увеличиваться при съедении сосиски. Я абсолютный новичок и в Гугле нашла только 25 вариантов хп бара для гта
-
function drawBar(x, y, w, h, amount, max)
love.graphics.rectangle("line", x, y, w, h)
-- процент полоски умножаем на ширину
local hp_w = amount / max * w
love.graphics.rectangle("fill", x, y, hp_w, h)
end
Благодарю)
-
А как задавать вот эту логику увеличения и уменьшения?
Snusmumriken
Snusmumriken
-
А это в функции описывать той же или которая update?
Snusmumriken
Ну, если ты в update проверяешь съеденность сосисок — да, в ней
-
Хорошо, спасибо))
Snusmumriken
Вот у меня тут в wheelmoved, реакция на кручение колёсика мыши
-
Поняла
Snusmumriken
А они luajit пробовали?
Snusmumriken
Да вроде должно быть, обычный ARM жеж.
Иван
Snusmumriken
Но так — да, они сравнили скрипты и компилируемую фигню, а теперь почему-то удивляются что скрипты медленнее, кто бы мог подумать ))
Иван
Иван
Как и Pawn
Anonymous
Да скриптовая Луа зачастую делает даже натив. Скорее всего, рекурсию неправильно написали.
Snusmumriken
Не уверен, вероятнее всего это кусок вебасма. То что компиляется хотя бы частично в процессе исполнения.
Иван
Нам либо интерпретатор, либо jit нужен. AOT даже не рассматривали
Иван
Snusmumriken
Карочи, нечего сравнивать жопы с пальцами ))
Чистые скрипты всегда будут уделаны, по природе своей. Другой вопрос — н а с к о л ь к о и достаточно ли этого.
Anonymous
Напиши правильно
return foo(x) - правильный хвост.
foo(x) - неправильный, потому что компилятор подставляет неявный return и это уже не хвост.
Вот и всё.
Иван
Snusmumriken
Anonymous
https://www.lua.org/pil/6.3.html
Snusmumriken
🤔
Snusmumriken
Если так то надеюсь это перекочевало в более новые версии, там этого не видел.
Snusmumriken
Карочи, ребятки, пишите на том что подходит. Все хвостовые рекурсии можно смело написать на сишной стороне, оставив луям логику, если ВДРУГ ЧТО-ТО НЕДОСТАТОЧНО БЫСТРО.
Anonymous
Всегда можно посмотреть байт-код :)
Snusmumriken
Я не использую рекурсию по религиозным соображениям читаемости и безопасности )
Иван
Вот результаты тестов фиба
Иван
Иван
Иван
Snusmumriken
Это милисекунды на первой шкале?
Иван
Иван
В общем, до fib(14) по скорости как wasm3 и pawn_asm, до fib(33) быстрее pawn, но медленнее того же pawn_asm (интерпретатор pawn на ассемблере)
Snusmumriken
os.clock имеет очень низкую точность, кстати.
Иван
os.clock вообще самому пришлось имплементировать
Snusmumriken
Вот такие результаты у луажыта
Snusmumriken
Но на всякий случай напоминаю, что это делается вот так. А с мемоизацией и кешированием — и того быстрее при частом использовании.
Иван
Snusmumriken
Это итеративный фибоначчи + jit ))
Timur
http://www.playwithlua.com/?p=77
Snusmumriken
О, кстати хвостовая рекурсия отсюда кажись работает.
Snusmumriken
Snusmumriken
Сейчас ещё дам результаты 5.1 без JIT, когда посчитает )
Snusmumriken
Всё, лень ждать. Где что сам найдёшь.
Результаты показаны так:
обычный:хвостовой
Я их правда одновременно гонял, так что результаты время от времени прыгают. Но суть в другом.
Иван
Snusmumriken
Карочи, сунь своим ребзям вот это, чтобы хвостовая рекурсия пахала. И пусть нюхают пуки.
function tfib(n)
local f
function f(a, b, n)
if n < 3 then
return b
else
return f(b, a + b, n - 1)
end
end
return f(1, 1, n)
end
А лучше —
local f
function f(a, b, n)
if n < 3 then
return b
else
return f(b, a + b, n - 1)
end
end
function tfib(n)
return f(1, 1, n)
end
Время не будет тратиться даже на генерацию функции.
Иван
Карочи, сунь своим ребзям вот это, чтобы хвостовая рекурсия пахала. И пусть нюхают пуки.
function tfib(n)
local f
function f(a, b, n)
if n < 3 then
return b
else
return f(b, a + b, n - 1)
end
end
return f(1, 1, n)
end
А лучше —
local f
function f(a, b, n)
if n < 3 then
return b
else
return f(b, a + b, n - 1)
end
end
function tfib(n)
return f(1, 1, n)
end
Время не будет тратиться даже на генерацию функции.
А если это на сях написать, скомпилить c -Os и скормить в Wasm3?))
Snusmumriken
Мне лень )
Иван
Просто получится так, что мы ускорили фиб в Lua, Wasm и нативе, но не ускорили сам Lua
Snusmumriken
Мм. Ты не понял.