retrocat
в луа не бывает пустых массивов последовательных? как в жс []?
retrocat
tbl = {}
это таблица
Aqendo
а в луа массивов и нет
retrocat
это таблица
но понять пустой это массив последовательный или словарь невозожно
Aqendo
#tbl == 0?
retrocat
я просто пишу Жсон Сериализатор
retrocat
и понимаю что передать [] невозможно
retrocat
и понимаю что передать [] невозможно
в таком контексте вообще не понять что это
Aqendo
в луа же таблица может одновременно быть и массивом и словарем
Hello, World! 🎄
и понимаю что передать [] невозможно
в json [] - это массив. В lua можно через {} сделать
Aqendo
(ну правда это уже именно словарь получится
retrocat
в json [] - это массив. В lua можно через {} сделать
но если из луа тейбла в жсон превратить
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
я пишу на жабе для luaj
хотя можно взять луа файл, но пускай будет нативная штука
Igor
хотя можно взять луа файл, но пускай будет нативная штука
Проще было бы тот же dkjson или json.lua использовать, но как знаешь
Igor
Все библиотеки (кроме cjson), насколько я помню, считают пустые таблицы пустым массивом. Эту неопределённость сложно назвать критичной, ибо она ну ничем не мешает. Не знаю, кому бы могли понадобиться пустые объекты в жсоне и для чего.
Igor
либо пустой обьект
Igor
либо пустой массив
Денис
Ну да, а через __newindex можно переопределить поведение при присвоении таблице значений
Опять обращаюсь к тебе, как к человеку знающему... В общем, способ, которым мы вчера создавали метатаблицу почему-то сбивает все бинды со стандартных типов... Толи нужно кложуру пушнуть, толи как-то __index нужно еще модифицировать...
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
Ну например: 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 ?
Чет я даже не представляю, как это могло случиться. Если только ты манипуляциями своими не поломал метатаблицу строк.
Igor
Я весь код же не вижу, так что сказать не могу, что и как случилось
Igor
Ты там что-то конкретно так сломал
Денис
Я весь код же не вижу, так что сказать не могу, что и как случилось
Могу весь проект скинуть, только там PB, но работа со стеком вся выполняется линейно, так что код читаем.
Igor
Могу весь проект скинуть, только там PB, но работа со стеком вся выполняется линейно, так что код читаем.
Кидай в лс, если хочешь. Но конкретно сейчас посмотреть не смогу, ближе к вечеру если только. Занят немного.
Igor
Может кто-то ещё успеет уже к этому времени помочь уже
Денис
Может кто-то ещё успеет уже к этому времени помочь уже
Да я так понимаю, тут никто так не баловался, только мы с тобой)))
Igor
Да я так понимаю, тут никто так не баловался, только мы с тобой)))
Ну вообще тут много кто с Lua C API работал, просто редко появляются
Денис
Ахахахахах, luasound expected, got luasound
Я сам сначала поржал, а потом приуныл)))
Lucky
ну, например случайная кирилица в а и о
retrocat
блин щас бы тех кто работал с luaj, там нет метода который кастит просто к любому java примитиву, который можно?
retrocat
http://luaj.org/luaj/3.0/api/org/luaj/vm2/lib/jse/CoerceLuaToJava.html не то?
это то, но я так понимаю конструкция сверху так и останется
Artyom
Всем привет. В с++ у меня есть объект, который создаёт lua_state, загружает скрипты, делая проверки. После этого мне нужно создать несколько копий этого объекта, чтобы у каждого был свой lua_state. Это нужно для создания пула потоков. Можно ли как-нибудь скопировать весь lua_state, не загружая каждый раз заново скрипты?
Snusmumriken
Понял, спасибо
Ну, ты ведь не планируешь создавать миллиарды потоков в секунду и точно так же удалять? Поток будет создан, после чего как минимум несколько секунд будет крутиться прежде чем быть освобождённым? Если так то можно смело подгружать скрипты. Это раз. Два — при очень большом желании, можно организовать кеш скриптов с диска в памяти. Работает только с текстом скриптов — ты такой считываешь текст скриптов в кеш, пробрасываешь его в тот или иной поток (с мутексами, как положено, или копированием в луёвый буфер конкретной машины), и на месте делаешь аналог loadstring в package.loaded. Это чисто для того чтобы меньше грузить диск. Но ты не сможешь просто так взять и очистить этот кеш. С кешами вообще некоторые забавные проблемсы.
Artyom
Ну, ты ведь не планируешь создавать миллиарды потоков в секунду и точно так же удалять? Поток будет создан, после чего как минимум несколько секунд будет крутиться прежде чем быть освобождённым? Если так то можно смело подгружать скрипты. Это раз. Два — при очень большом желании, можно организовать кеш скриптов с диска в памяти. Работает только с текстом скриптов — ты такой считываешь текст скриптов в кеш, пробрасываешь его в тот или иной поток (с мутексами, как положено, или копированием в луёвый буфер конкретной машины), и на месте делаешь аналог loadstring в package.loaded. Это чисто для того чтобы меньше грузить диск. Но ты не сможешь просто так взять и очистить этот кеш. С кешами вообще некоторые забавные проблемсы.
Да, у меня будет создаваться несколько потоков, загружать скрипты и потом перемалывать входящие данные. То есть загрузка будет один раз при старте, ну, потом может при обновлении самих скриптов перезагрузить их надо будет
Snusmumriken
Ну и забей тогда )
Snusmumriken
Если же бы ты хотел создавать потоки на микро задачи, то я послал бы тебя изучать корутины и асинхронщину. Например, как работает тот же nginx (openresty): он запускает 1-4 потока, и каждый запрос превращается в завёрнутую в себя корутину переданную какому-то из потоков, с yield'ами на всех потенциально блокирующих операциях, что даёт восхитительную возможность плодить их и удалять пачками, не трогая луа стейт и поток ОС, обрабатывая десятки и сотни тысяч соединений единовременно.
R
Пул потоков, что ли? Посмотри Lanes или Effil, возможно, что-то подойдёт.
Snusmumriken
Ну тут уже понятно что Тёмыч хочет мутить это на плюсовой стороне. Можно и на луёвой, да. Но там есть некоторое количество косяков которые придётся разруливать, например передачу userdata между тредами, что избегается на плюсовой стороне.
Snusmumriken
Из неприятного — у lanes и effil есть проблемы с убийством потоков, если у какой-то операции есть лимит по времени, нужно чтобы луёвый код потока "двигался" чтобы корректно его убить снаружи, это возможно только если сделать всё блокирующее неблокирующим. В противном случае, может оказаться куча висящих хендлеров, которые не завершатся примерно никогда. Утечки памяти + утечки хендлеров (файловых, сетевых, которые были открыты в потоке перед убийством) = веселье в отладке и падающее через несколько часов работы приложение.
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
у меня есть вопрос о lua мне нужна функция и это будет долго могу ли я говорить по английски чтобы написать проблему ?
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
да, мой вопрос относится к циклам таблицы и потокам
ᴠɪᴋᴀʀɪ ʜᴏɴᴇ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 ?
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
for i = 10, 1, -1 do -- 10, 9, 8, 7 ... end
Это можно использовать только для 2 замен?
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Snusmumriken
Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
В смысле
спасибо, я знаю этот код, прежде чем я помню, что снюс написал для меня
Hello, World! 🎄
Куда ты хочешь его вращать?
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) получать направление.