Highly Likely
Anonymous
И?
если я tb=nil, но не вызову метод дестрой.
я не высвобожу память.
если я не присвою nil, то могу попросить несуществующий объект на стороне Си.
Highly Likely
Igor
userdata сам удалится, если внутри таблицы была только одна ссылка на него
Highly Likely
https://www.lua.org/manual/5.4/manual.html#2.5.3
Igor
и для него же вызовется метод __gc при очистке
Igor
t = {userdata: 0xDEADBEEF}
...
t = nil
collectgarbage()
// Здесь уже не будет существовать в памяти ни t, ни userdata
Anonymous
tb=nil + метаметод __gc
так я же писал...без метатаблиц хочется.
Ладно мне не впадлу делать так.
tb:destroyed()
tb = nil
Да конечно не будет. Но огромный объект в си будет существовать.
userdata это просто указатель на другой указатель и.т.д.
А еще в контексте. Си + Go + Lua 5.1
Я не хочу усложнять себе жизнь :)
Тем более есть еще тонкая логика обновления.
Которая при вызове GC может что то да и подпортить.
Именно с точки зрения логики на Си.
Но всем спасибо, я убедился, что лучшего решения нет.
Igor
Highly Likely
Какой-то жуткий стек. По-моему, Go (это я по личному опыту говорю) покрывает 99% потребности в Lua
Highly Likely
Зачем это всё в одну кучу мешать мне лично непонятно
Highly Likely
При том, что в Go тоже есть возможность взаимодействовать с C
Igor
Igor
Тоже юзердата ссылкой является
Igor
внутри есть метод __gc
Igor
Highly Likely
Ладно, я сдаюсь. Не люблю решать абстрактные задачи, особенно когда цель — извратиться посильнее
Snusmumriken
Anonymous
внутри есть метод __gc
Да я это все понимаю. Вопрос. Что если объект Lua не нужен сейчас, а нужен будет потом.
Он очистится. Придется инициализировать заново.
Понимаешь? Мне нужно именно тонко контролировать.
Так я могу сказать.
tb = nil в одном случае.
объекта Lua не будет, но в Си объект останется.
и tb:destroy()
tb = nil когда мне ничего не надо.
Так я думаю.
Snusmumriken
Есть объект его надо разрушить, что бы потом нельзя было использовать.
Прости пожалуйста, но это не "задача". Это какое-то следствие какой-то задачи. Что за фигню ты делаешь на этот раз?
И да, самое простое решение задачи — пометить его как неюзабельный self.destroyed = true, а в методах проверять на это. И нет, лучше — хранилище, у тебя ведь не синглтон.
Anonymous
Highly Likely
Igor
Highly Likely
Хе
Highly Likely
Но честно говоря смесь Go + C + Lua уже настораживает, учитывая что Go покрывает функционал обоих языков почти полностью
Anonymous
Highly Likely
1) https://pkg.go.dev/unsafe
https://go101.org/article/unsafe.html
2) https://github.com/hajimehoshi/ebiten
Highly Likely
Второе конечно больше про игрушки, но там еще с десяток графических библиотек на основе всяких этих ваших SDL
Highly Likely
Anonymous
Что C?
SDL это C,CGO. Так что по факту чистый го без Си не может в графику, так же как и в плагины без Lua или чего то подобного.
Такие дела.
Highly Likely
Что такое "плагины для Go”?
Highly Likely
https://github.com/fogleman/gg
Ок, вот Pure Go Graphics Library
Highly Likely
Никакого Си
Igor
Он наверное про какой-то самостоятельный код, который можно вгрузить при рантайме, допустим, и выполнять его функции
Igor
В принципе и на чистом Go это реализуемо
Highly Likely
Ага. Rimworld вон свои моды вообще на Шарпе подгружает и ничо
Anonymous
Плагины это плагины. Моды, хоть как назовите. Изменить логику программы, без ее пересборки.
Highly Likely
Короче, мне, в общем и целом, не очень интересен этот дискусс. Просто утверждение о том, что “никак иначе точно нельзя сделать, нужно именно так” мне показалось странным, учитывая что можно, но да ладно
Anonymous
Igor
Нарыл какую-то такую хероту https://pkg.go.dev/plugin
Anonymous
Igor
Так, давай в самое начало вернёмся. Какое вообще предназначение у Go в данной связке? Почему бы не обойтись Сишкой и луями?
Igor
Наличие 3 языков уже не подходит под определение "небольшой" граф редактор
Igor
Ну так это ж не на прод код? Вот ты и ответил на свой вопрос. Почему бы не заняться там, не знаю, саморазвитием и не подтянуть сишку, реализовывая редактор без использования Go? Лишним не будет.
Igor
Go сам по себе ещё довольно сыроват (да, я знаю, меня сейчас за это высказывание помидорами закидают тухлыми), но всё же. 12 лет языку. Многое он ещё попросту не умеет, даже вот пресловутые плагины нельзя юзать где-то кроме макоси и линухи. Это не дело.
Igor
Из-за этого и приходится воротить каких-то невообразимых размеров велосипеды. Для меня очевидно, что Go в этой связке слабое звено, от которого бы лучше отказаться.
Highly Likely
У Go есть отличная сфера применения, в которой он сейчас почти ультимативен в плане удобства. Реализация графических библиотек не одна из них, конечно же
Igor
Igor
Я лично реализовал
Highly Likely
Хотя, впрочем, ничего этому особо не мешает. Просто не особо кому-то нужно
Igor
dll'ки на лету подгружаешь и процедуры из них тягаешь
Igor
точно так же их можно и выгрузить
Igor
чем не плагины?
Igor
Просто dll'ка экспортирует некие символы, чтобы основная программа поняла, что и как она делает.
Igor
Snusmumriken
ага) Я выбрал скриптовый язык не просто так.
Посмотрите как питон используют в ST4, Inkscape, gimp и.т.д.
Как Lua используют в МойОфис. Вот это мне и надо получить.
Берёшь такой и пилишь луашные линки под стандартные функции редактора.
Допустим, под основные элементы в твоём редакторе делаешь классоподобную ерунду, выгружаешь в луа функции их конструкторов с параметрами, выгружаешь методы работы и всё, вот тебе скриптовая апишка.
for i = 1, 10 do
local shape = MyShape:New(vertices)
shape:move(i * 10)
end
local shapes = Document:QueryArea(
x1, y1, x2, y2,
function(o) return o:Type() == "Circle" end
)
for i, v in ipairs(shapes) do
v:Fill(r, g, b)
v:Stroke("line", 30)
end
Anonymous
Берёшь такой и пилишь луашные линки под стандартные функции редактора.
Допустим, под основные элементы в твоём редакторе делаешь классоподобную ерунду, выгружаешь в луа функции их конструкторов с параметрами, выгружаешь методы работы и всё, вот тебе скриптовая апишка.
for i = 1, 10 do
local shape = MyShape:New(vertices)
shape:move(i * 10)
end
local shapes = Document:QueryArea(
x1, y1, x2, y2,
function(o) return o:Type() == "Circle" end
)
for i, v in ipairs(shapes) do
v:Fill(r, g, b)
v:Stroke("line", 30)
end
ага, спасибо за совет.
Snusmumriken
ага, спасибо за совет.
Видел солярку? Солярка это литературно скриптовый векторный граф редактор с луёвой апишкой.
А на основе чего делали апишку солярки? Правильно, ActionScript. А что такое ActionScript? Правильно, скрипты для граф-редактора AdobeFlash. Что народ делал на AdobeFlash? Рисовал всякую ерунду, а потом анимировал/скриптовал по желанию, получая мультики и игрушки.
Snusmumriken
Очень хочется сделать апишку которая не похожа на что-то существующее, чтобы подчеркнуть свою уникальность и особенность своего детища. Но это путь экспериментов - взлетит/не взлетит (и скорее не взлетит). Но используя апишку приближённую к существующим системам, ты позволяешь людям сразу использовать твоё детище не задумываясь и не заморачиваясь особо, они уже практически обучены пользованию твоей ерундой, для них это интуитивно.
Highly Likely
По-моему, у человека стоит цель извратиться, а не сделать production-ready код
Snusmumriken
Что же вы оба со мной делаете? Что по вашему мнению "продушнон-реди код"?
Это какой-то всратый стандарт выдуманный всратыми чуваками которые решили что "мы тут типа самые умные и только мы знаем что надо в прод а что не надо"? ))
В прод льётся всё говно, лишь бы побыстрее начало работать. Всегда. Везде. Аксиоматически. Как бы ни старались и ни писали правила и не изгалялись с тестами-литерами-фигинтерами. Чем дешевле тем лучше. Баги потом пофиксим (если не критично — никогда).
И меня упарывает, насколько токари и слесари от кода возомняют себя какими-то там компутер-саентистами. Не в обиду токарям и слесарям, у них очень много тонкостей в работе. Но они всё ещё токари и слесари.
Highly Likely
А токари и слесари в твоем понимании — это, простите, кто?)
Snusmumriken
Те кто не занимаются развитием айтишной промышленности. Ремесленники.
Highly Likely
А что значит “заниматься развитием айтишной промышленности”?
Highly Likely
Define.
Snusmumriken
Те кто пишут стандарты, те кто разрабатывают новые технологии вроде тех же нейросеток/методологий и так далее. Не использует, а делает новое и доказывает состоятельность того что делает.
Highly Likely
Вот тебе пример того, что production-ready называю я, касательно библиотек/фреймворков/etc: https://stackoverflow.com/questions/52009044/what-makes-a-production-code
Highly Likely