retrocat
в луа не бывает пустых массивов последовательных? как в жс []?
Aqendo
retrocat
Aqendo
а в луа массивов и нет
retrocat
это таблица
но понять пустой это массив последовательный или словарь невозожно
retrocat
Aqendo
#tbl == 0?
retrocat
я просто пишу Жсон Сериализатор
retrocat
и понимаю что передать [] невозможно
Aqendo
в луа же таблица может одновременно быть и массивом и словарем
Aqendo
(ну правда это уже именно словарь получится
retrocat
retrocat
то это будет неопредленность
retrocat
либо пустой обьект
retrocat
либо пустой массив
Aqendo
Массив - Словарь с ключами 0,1,2....
Hello, World! 🎄
Igor
я просто пишу Жсон Сериализатор
Велосипедное ненужное ненужно.
http://dkolf.de/src/dkjson-lua.fsl/home
https://github.com/mpx/lua-cjson
https://github.com/rxi/json.lua
retrocat
retrocat
поэтому не)
Igor
Все библиотеки (кроме cjson), насколько я помню, считают пустые таблицы пустым массивом. Эту неопределённость сложно назвать критичной, ибо она ну ничем не мешает. Не знаю, кому бы могли понадобиться пустые объекты в жсоне и для чего.
Igor
либо пустой обьект
Igor
либо пустой массив
Igor
Igor
Какие бинды?
Денис
Какие бинды?
Ну например:
sound = require "luasound"
s = sound.new("aaa.wav")
line = io.read()
method = line:match("(.+)%s")
> bad argument #1 to '__index' (luasound expected, got luasound)
stack traceback:
[C]: in metamethod '__index'
test.lua:9: in main chunk
[C]: in ?
Aqendo
Ахахахахах, luasound expected, got luasound
Igor
Igor
Я весь код же не вижу, так что сказать не могу, что и как случилось
Денис
Igor
Ты там что-то конкретно так сломал
Igor
Может кто-то ещё успеет уже к этому времени помочь уже
Денис
Lucky
ну, например случайная кирилица в а и о
retrocat
блин щас бы тех кто работал с luaj, там нет метода который кастит просто к любому java примитиву, который можно?
Aydar
retrocat
Александр
Igor
Artyom
Всем привет.
В с++ у меня есть объект, который создаёт lua_state, загружает скрипты, делая проверки. После этого мне нужно создать несколько копий этого объекта, чтобы у каждого был свой lua_state. Это нужно для создания пула потоков. Можно ли как-нибудь скопировать весь lua_state, не загружая каждый раз заново скрипты?
Snusmumriken
Artyom
Snusmumriken
Понял, спасибо
Ну, ты ведь не планируешь создавать миллиарды потоков в секунду и точно так же удалять?
Поток будет создан, после чего как минимум несколько секунд будет крутиться прежде чем быть освобождённым?
Если так то можно смело подгружать скрипты. Это раз.
Два — при очень большом желании, можно организовать кеш скриптов с диска в памяти. Работает только с текстом скриптов — ты такой считываешь текст скриптов в кеш, пробрасываешь его в тот или иной поток (с мутексами, как положено, или копированием в луёвый буфер конкретной машины), и на месте делаешь аналог loadstring в package.loaded.
Это чисто для того чтобы меньше грузить диск.
Но ты не сможешь просто так взять и очистить этот кеш. С кешами вообще некоторые забавные проблемсы.
Artyom
Ну, ты ведь не планируешь создавать миллиарды потоков в секунду и точно так же удалять?
Поток будет создан, после чего как минимум несколько секунд будет крутиться прежде чем быть освобождённым?
Если так то можно смело подгружать скрипты. Это раз.
Два — при очень большом желании, можно организовать кеш скриптов с диска в памяти. Работает только с текстом скриптов — ты такой считываешь текст скриптов в кеш, пробрасываешь его в тот или иной поток (с мутексами, как положено, или копированием в луёвый буфер конкретной машины), и на месте делаешь аналог loadstring в package.loaded.
Это чисто для того чтобы меньше грузить диск.
Но ты не сможешь просто так взять и очистить этот кеш. С кешами вообще некоторые забавные проблемсы.
Да, у меня будет создаваться несколько потоков, загружать скрипты и потом перемалывать входящие данные. То есть загрузка будет один раз при старте, ну, потом может при обновлении самих скриптов перезагрузить их надо будет
Snusmumriken
Ну и забей тогда )
Snusmumriken
Если же бы ты хотел создавать потоки на микро задачи, то я послал бы тебя изучать корутины и асинхронщину.
Например, как работает тот же nginx (openresty): он запускает 1-4 потока, и каждый запрос превращается в завёрнутую в себя корутину переданную какому-то из потоков, с yield'ами на всех потенциально блокирующих операциях, что даёт восхитительную возможность плодить их и удалять пачками, не трогая луа стейт и поток ОС, обрабатывая десятки и сотни тысяч соединений единовременно.
Artyom
R
Пул потоков, что ли? Посмотри Lanes или Effil, возможно, что-то подойдёт.
Snusmumriken
Ну тут уже понятно что Тёмыч хочет мутить это на плюсовой стороне. Можно и на луёвой, да. Но там есть некоторое количество косяков которые придётся разруливать, например передачу userdata между тредами, что избегается на плюсовой стороне.
Snusmumriken
Из неприятного — у lanes и effil есть проблемы с убийством потоков, если у какой-то операции есть лимит по времени, нужно чтобы луёвый код потока "двигался" чтобы корректно его убить снаружи, это возможно только если сделать всё блокирующее неблокирующим. В противном случае, может оказаться куча висящих хендлеров, которые не завершатся примерно никогда. Утечки памяти + утечки хендлеров (файловых, сетевых, которые были открыты в потоке перед убийством) = веселье в отладке и падающее через несколько часов работы приложение.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
у меня есть вопрос о lua мне нужна функция и это будет долго могу ли я говорить по английски чтобы написать проблему ?
Snusmumriken
Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
да, мой вопрос относится к циклам таблицы и потокам
Snusmumriken
Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
i have problem about math.pi handling and i use table to create value path, i have want to run value in descending and ascending order like 50 to 40 and 40 to 60 and so on
my table have={50,40,60,30,70,20,80,10} like this to form a circle and spin.
but the result is 50,40,30 what i want is 50,49,48,47,46 and so on have 1 digit range.
Snusmumriken
Omg. He wants to make a table of heights for jumping in the game. This is literally a table of height offsets.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
do i need to write every 1 digits in the table ?
Hello, World! 🎄
i have problem about math.pi handling and i use table to create value path, i have want to run value in descending and ascending order like 50 to 40 and 40 to 60 and so on
my table have={50,40,60,30,70,20,80,10} like this to form a circle and spin.
but the result is 50,40,30 what i want is 50,49,48,47,46 and so on have 1 digit range.
for i = 10, 1, -1 do
-- 10, 9, 8, 7 ...
end
Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Snusmumriken
Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
В смысле
спасибо, я знаю этот код, прежде чем я помню, что снюс написал для меня
Hello, World! 🎄
Куда ты хочешь его вращать?
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Snusmumriken
wheel = {
x = 10, y = 10,
speed = 10,
angle = 0
}
function wheel_update(dt)
local turn_per_sec = dt / (math.pi * 2)
wheel.angle = wheel.angle + turn_per_sec * wheel.speed
end
function wheel_draw()
love.graphics.draw(wheel_img, wheel.x, wheel.y, wheel.angle)
end
That's all
Hello, World! 🎄
Тебе нужно сделать rotate где будет в радианах хранится значение поворота и через cos(rotate), sin(rotate) получать направление.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ