Size: a a a

2019 December 28

S

Snusmumriken in pro.lua
Отчёт об исследованиях луёво-сишной апишки:
1. Full userdata это типа размеченный блок памяти, имеет метаметоды;
2. Light userdata — это просто указатель на какие-то сишные данные, метаметодов не имеет, даже __gc, соответственно необходимо управлять сборкой с сишной стороны. Но в full userdata можно впилить указатель на указатель, и получить типа light userdata с метаметодами.
источник

DF

Dmitry Frolov in pro.lua
👎
источник

MT

Monsieur Taishín in pro.lua
Марк ☢️ Коренберг
Там где последовательная передача между 5 микросервисами
аа.. если это оно, то да, супер фильмец же )
источник

I

Igor725 in pro.lua
Snusmumriken
Отчёт об исследованиях луёво-сишной апишки:
1. Full userdata это типа размеченный блок памяти, имеет метаметоды;
2. Light userdata — это просто указатель на какие-то сишные данные, метаметодов не имеет, даже __gc, соответственно необходимо управлять сборкой с сишной стороны. Но в full userdata можно впилить указатель на указатель, и получить типа light userdata с метаметодами.
Я себе для таких дел пару функций накидал. Получилось удобно, но не очень красиво. (Функция setup нужна, чтобы при создании юзердаты можно было в регистровую таблицу cs_data внести необходимые данные, например, сишные структуры-вектора, чтобы потом их можно было менять, при обращении к этой юзердате по средствам геттеров и сеттеров)
источник

S

Snusmumriken in pro.lua
Igor725
Я себе для таких дел пару функций накидал. Получилось удобно, но не очень красиво. (Функция setup нужна, чтобы при создании юзердаты можно было в регистровую таблицу cs_data внести необходимые данные, например, сишные структуры-вектора, чтобы потом их можно было менять, при обращении к этой юзердате по средствам геттеров и сеттеров)
Чот два pushlightuserdata и один newuserdata. Многовато, хм
источник

I

Igor725 in pro.lua
Первый в gettable попится, как я понял
источник

I

Igor725 in pro.lua
Или же он просто в стеке далеко, пока просто так сделал, потом посмотрю в стек и поставлю pushvalue, если не попится
источник

I

Igor725 in pro.lua
Просто в момент написания было слишком лень
источник

I

Igor725 in pro.lua
Но gettable уносит из стека значение, насколько я помню
источник

S

Snusmumriken in pro.lua
Ну если попится, то можно вытащить из того места, куда попнулся ))
источник

S

Snusmumriken in pro.lua
А то указатели разными получаются.
источник

I

Igor725 in pro.lua
Лайт всегда один
источник

I

Igor725 in pro.lua
А вот full юзердата разная
источник

S

Snusmumriken in pro.lua
Хм, оки.
А то я своровал функции из luasocket'а, и они чот хороши, практически полный аналог луёвой фигне. А так — я генерирую юзердату, пихаю в неё указатель и радуюсь жизни.
источник

I

Igor725 in pro.lua
Я тоже хотел из сокетов скоммуниздить, но потом решил что-то своё сделать
источник

I

Igor725 in pro.lua
И вышло что-то страшное, но мне в целом понравилось, как мой вариант работает
источник

I

Igor725 in pro.lua
Разве что от двух пушей лайтовой даты нужно избавиться, это да
источник

S

Snusmumriken in pro.lua
Но, кстати, с такой юзердатой есть кучка проблем. Например, я вот делаю steamworks, и там есть друганы. Но проблема в том, что вот эти вот newuserdata как раз возвращают каждый раз новый указатель, поэтому я думаю про буфер этих юзердат на луёвой стороне, типа таблички с __mode = 'v', запихивая туда ключи-значения типа [ID] = userdata.
Типа, если нашли юзердату в буфере — вернули её, если не нашли — сгенерили новую.
источник

I

Igor725 in pro.lua
Я и сделал такой "буфер"
источник

I

Igor725 in pro.lua
У меня это таблица в регистре
источник