mva
Alexey
The unit of compilation of Lua is called a chunk
break вроде только из циклов выходит
while 1 do do do break end end end
( не проверял, но удивлюсь если несработает )
Daniil
Точно. Выходит из while сразу.
Snusmumriken
Чёт нелепо как-то. Можно же и в и love.draw получить dt
Можно в love.draw получить dt, и иногда это бывает крайне полезно, например "если игрок коснулся чего-то — нарисовать поверх него квадратик". Но есть такое правило под названием "разделение логики и представления". В первом у тебя логика, во втором — представление.
Snusmumriken
Иван
Snusmumriken
Snusmumriken
https://love2d.org/wiki/love.run
Snusmumriken
Которую можно изменить.
Иван
Крч непонятное усложнение. run вроде вообще убрали?
Snusmumriken
Нет, разумеется.
Иван
Ааааааааааа
Snusmumriken
Ещё update/draw, как раз, разделены в том числе для принципиальной возможности пропуска кадров, моделирования срезов по времени, например в update идёт какой-то сверхтяжёлый малоостановимый процесс на корутинах, разрешаемый не за один десяток кадров, на draw — отрисовка текущего среза.
Для фиксированного обновления физики, для полного формирования мешей/батчей, и в целом, для ru.wikipedia.org/wiki/Model-View-Controller
notepad++
А как вообще update реализовывается в других языках, без фреймворков, через потоки?
Snusmumriken
Хех, обычно точно так же как тут, обычный цикл, только разработчик обычно сам разделяет условный update и draw.
Могут и через потоки: отрисовка в "главном", обновление в "параллельных".
Иван
https://code.matthewwild.co.uk/squish
Такого треша я давно не встречал, но оно работает
Треш потому что чувак попытался сделать всё и сразу, а в итоге его программа не способна отличить
require('lib')
от
-- require('lib')
Иван
ещё и зависимость от LOADLIB добавляется зачем-то, когда я старательно хотел её избежать
Иван
Какие ещё варианты? На learnxiny я видел следующее:
-- Another file can use mod.lua's functionality:
local mod = require('mod') -- Run the file mod.lua.
-- require is the standard way to include modules.
-- require acts like: (if not cached; see below)
local mod = (function ()
<contents of mod.lua>
end)()
-- It's like mod.lua is a function body, so that
-- locals inside mod.lua are invisible outside it.
Иван
mva
ты упускаешь один момент
mva
require умеет грузить не только pure-lua модули, но и скомпилированные
Иван
СУПЕР
mva
а их не забандлишь
Иван
а, стоп, мне не нужен require
Иван
Я думаю, я мог бы сделать так:
local mod = (function (); binary_eval("<и вот тут бинарь>"); end)()
Иван
а binary_eval на своей стороне имплементировать
Alexey
а их не забандлишь
Вообще достаточно просто. Просто копируешь все в один файл а при запуске разархивируешь в темп дир.
я так с помощью l-bia в один exe файл паковал iup/lsqlite/socket библиотеки для простого гуёвого приложения. Правда l-bia пришлось допиливать чтобы он корректно библиотеки по папкам расскладывал. Ну и у iup был ефе фокус когда lua модуль одновременно еще является зависимостью для другой dll. К сожелению не уверен что версия l-bia у меня сохранилась
mva
mva
так что с распаковкой вариант скорее всего не выгорит
Roy
Ребят, как проверить совпадает ли первый символ в массиве?
Roy
if chars[1] == '+' then
print('find')
end
Roy
что-то такое нужно
Roy
потому что string.find дорого, оно ищет по всему сообщение первое вхождение, а мне нужно сравнивать только первый символ на равенство
Иван
Иван
?
Highly Likely
Roy
а еще дешевле нельзя?
Roy
просто по индексу сравнить
Highly Likely
Куда дешевле чем О(1)?
Roy
Highly Likely
А, там строка
Highly Likely
Да, кажется, только саб
Иван
Блин, я просто удивляюсь, насколько lua резиновая. Ещё бы += было бы... И макросы))
Highly Likely
Иван
Я слышал, что есть Moonscript
Иван
Он заброшен?
Highly Likely
Скорее всего
Иван
А вообще можете рассказать про правила написания максимально производительного кода для Lua без JIT?
Иван
Где могут быть подводные камни, например
Highly Likely
Иван
Luсky
Иван
Luсky
Lua Performance Tips
https://www.lua.org/gems/sample.pdf
Иван
Иван
Иван
Я в этом документе постоянно вижу "Lua is not smart enough" и "Lua is smart enough"
Alexey
а еще дешевле нельзя?
string.byte(s,1,1) == 53
естественно для однобайтных символов.
Это быстрее т.к. не ищется и не создается новая строка
Roy
Roy
я щас сделал так message:sub(1,1) == symbol
Roy
где message - это аргумент функции
Alexey
Тогда нужно еще string.byte(symbol) сделать и это еще один С вызов. Но если symbol это типа константы - то можно его и один раз вызвать
mva
(только плюс это 43, кстати)
Alexey
С юникодом есть
кодировки
различные модификаторы
нормализация
И я не проверял, но что то мне подсказывает что в юникоде плюсов сильно больше одного
mva
ну, я вангую, что он пишет что-то типа бота, реагирующего на команды, начинающиеся с плюса :)
mva
если кто-то будет отправлять не тот плюс, что на клавиатуре, а юникодные, то ССЗБ и максимум пробелм которые будут - бот будет игнорировать такие команды :)
Roy
Вопросик есть по таблицам
Есть следующий код
Roy
Если KrakenGmList не имеет элемента с GetActName именем, то будет ли создаваться какой нибудь объект в луа?
Roy
Я пытаюсь понять, выгодна ли такая проверка с точки зрения расходов по памяти.
В С++ допустим хеш таблицы создадут объект если такого объекта не было при обращении, как Map["name"]