Александр
> These classes, on construction, assignment and other operations, forcibly obtain the lua_State* associated with the main thread, if possible. Using these classes will allow your code to be immune when a wrapped coroutine or a lua thread is set to nil and then garbage-collected.
Anton
Окей, хорошо, с L может что-то пойти не так, если указатель на неё теряется каким-то образом. Например, L был запушан на стек другой корутины в рамках исполнения какой-то функции: корутина, соответствующая L, открутилась, функция завершилась, корутина будет удалена GC.
Anton
И если какой-то объект достижим только через стек этой L (например), то и он будет удалён.
Да, такой сценарий можно назвать протуханием стейта.
Александр
Так, можно ещё раз, но помедленнее. L - основной стейт, L1 - стейт какой-то корутины.
Правильно ли я понял, что L1 может быть как-то сохранен, что его соберёт сборщик мусора, хотя реально он должен ещё жить? Разве L1 не имеет счетчик ссылок "себя", чтобы знать, пора ему умирать или нет?
И описанная ситуация возможна в луа или это косяк разраба, который юзает C-API?
Александр
Вообще, когда я добуду минимальный воспроизводимый пример, я его обязательно покажу
Dadaskis
Отойду чуть-чуть от текущей темы...
Какие либы есть кроме LuaBridge, которые со стороны C++ кода позволяют добавлять кучу всего в Lua?
Александр
Anton
Так, можно ещё раз, но помедленнее. L - основной стейт, L1 - стейт какой-то корутины.
Правильно ли я понял, что L1 может быть как-то сохранен, что его соберёт сборщик мусора, хотя реально он должен ещё жить? Разве L1 не имеет счетчик ссылок "себя", чтобы знать, пора ему умирать или нет?
И описанная ситуация возможна в луа или это косяк разраба, который юзает C-API?
Корутина L1 — это просто значение, которое живет по тем же принципам, что и все остальные строки/таблицы/корутины. Да, если вы хотите, чтобы объект корутины жил, он должен быть достижим для GC.
Anton
Дмитрий
А бывают луа реверсеры?
Александр
Если у нас таблица, на которую есть несколько ссылок из разных корутин, то в каждом слоте на стеке лежит указатель на неё + счетчик ссылок? @igelhaus
Александр
Я в свою очередь попробую решить проблему так: если у меня в плюсовом коде хранятся таблицы, которые могут пережить какие-то из корутин, то их следует хранить stateless, вручную ref/unrefая их
Anton
Ясно. К сожалению, не могу поддержать разговор про sol.
Но да, идея верная: если данные, которые порождает корутина, должны жить дольше корутины, то они всегда должны быть как-то достижимы.
Александр
Спасибо большое, Вы многое прояснили. До этого в моей голове сидела мысль, что каждый объект ассоциирован с каким-то lua_State. Но как выяснилось, он появляется лишь в sol'овской абстракции и в данном случае всё ломает. Буду чинить, ещё раз спасибо
Anton
vvzvlad
Держитесь там!
Mark ☢️
local pretty = require "pl.pretty"
local function qwe()
return nil, 'pepyaka'
end
pretty.dump(qwe())
так вот, блять, этот код создаст файл pepyaka и запишет в него трибуквы (nil)
Highly Likely
А что не так?
Mark ☢️
да всё так. просто апи уебанское. может внезапно создать файл когда этого не ждёшь
Snusmumriken
Mark ☢️
Mark ☢️
ничего нового
Snusmumriken
А я злой
Snusmumriken
В целом, единственное что тут неприятно — это именно что какая-то посторонняя работа с файлами вместо работы со строками. Имхо всё вот это вот не должно никуда выводить, только вовращать строку. Типа если пользователь захочет файл — он откроет его, и запишет туда строчку которую вернули дампы. Ну, по хорошему.
Mark ☢️
Александр
@Snusmumriken @igelhaus
Проблема, с которой я пришёл вчера, решилась. sol2 действительно хранил lua_State*, которому принадлежит та или иная ссылка. И в нём был механизм, который позволял создавать такие плюсовые объекты, в которых lua_State* всегда гарантированно будет взят основным, а не от какого-либо треда. Но в этом механизме была небольшая опечатка, из-за которой он просто работал некорректно. Благодаря вам эта опечатка была обнаружена, моя программа перестала падать, а библиотека станет чуть лучше после одобрения PR. Большое спасибо.
Anton
@Snusmumriken @igelhaus
Проблема, с которой я пришёл вчера, решилась. sol2 действительно хранил lua_State*, которому принадлежит та или иная ссылка. И в нём был механизм, который позволял создавать такие плюсовые объекты, в которых lua_State* всегда гарантированно будет взят основным, а не от какого-либо треда. Но в этом механизме была небольшая опечатка, из-за которой он просто работал некорректно. Благодаря вам эта опечатка была обнаружена, моя программа перестала падать, а библиотека станет чуть лучше после одобрения PR. Большое спасибо.
Очень круто, рад, что все решилось :-)
Lucky
Воот, допилил таки перевод букваря по Gideros.
Lucky
Интересный движок.
Tverd
Годо как-то получше смотрится. Да и корона тоже
Tverd
Но букварь это хорошо 👍🏻
Nibeon
Nibeon
Или он будет где-то выложен? Или её купить надо будет (книжку с переводом)?
Lucky
да
Lucky
не, выкладывать не буду
Nibeon
да
А в каком оно там формате? Статьи?
Lucky
это очень дорого
Lucky
в epub
Nibeon
А) счас посмотрим)
Pavel
Да что вы знаете о тротлинге.....
Pavel
По оси Y секунды...
Konstantin
Всем привет.
Вопрос: как дебажить луа на мак (наверное - в vscode)
Детали: есть игра 15-и летней давности, которая собирается под мак и линукс и в которой надо добавить достаточно много луа кода.
Из разрабов только плюсеры (Ваш покорный слуга), и от написанного луа кода очень сильно течет мозг. Проект писался двумя джунами, за то очень активно.
Сейчас нужно поднять дебаггер, прям жизни без него нет, в чем угодно и как угодно.
Проект на cmake, работаем в xcode 9.4.1 (в более поздних версиях не работает из за deprecated api) либо чез cmake && make && run.
Архитектура Lua файлов достаточно сложная - все идет через с++ код, подгружается динамически исходя из параметров, получаемых по сети.
Konstantin
это я уже погуглил, поставил и не смог раскурить за недостатком информации
Konstantin
хотя надо видимо взять яйца в руки и просто попробовать
Leon174
Вот сколько раз не пробовал VS Code, столько раз и снес. Не нравится, хоть ты тресни. Несерьезный он какой-то.
Мой вариант – IntelliJ IDEA Community Edition + EmmyLua, отладчики в комплекте, хотя под Mac только удаленный.
Leon174
https://www.jetbrains.com/idea/download/#section=mac
Leon174
https://emmylua.github.io/
Leon174
Есть еще плагин Lua для Idea, но он какой-то странной жизнью живет. То вроде кажется, что окончательно сдох, то вдруг откоматозится. EmmyLua больше нравится, хотя там вместо документации палочки-веточки и гифки.
Leon174
https://plugins.jetbrains.com/plugin/5055-lua/
Konstantin
@leon174 под мак только удаленный? потрясающе, это как вообще
Konstantin
mind blowing
Leon174
Ну, сами так пишут. У меня мака нет, ничего сказать не могу.
Leon174
Konstantin
спасибо 🙂 Попоробую запустить проект в IntelliJ
Mark ☢️
Mark ☢️
Konstantin
день потрачен. Подтянул расширения, перебрал все вручную.
Из забавного - на старте запустился отладчик для луа, я так и не понял как - мануала нет, китаец на гитхаб написал, что мануала и не будет.
Но как он выбрал луа файл и так далее - большая загадка. Проект стартанул не правильно.
Починил запуск проекта, все таки это первый раз запуск отладки в vscode - отвалился луа дебаггер, при чем отвалился с концами.
Перебор и т.д. не помогло
Konstantin
сложностей добавляет то, что скрипт создается в недрах игрового движка, луа версии 5.2.1, и хз как добавить туда луашные сокеты.
Попробовал lrdb, как ниболее подходящий, потдянул плюсовый дебаг сервер, вызвал attach - брейкпоинты не работают, даже самый первый. Нашел issue на github, что на маке и не заработает. расстроился
Konstantin
надеюсь было интересно это читать
🐅🤦♂️
надеюсь было интересно это читать
интересно читать, только связывай свои сообщения через "Reply" с первым в цепочку, что-бы можно было прочитать всю историю, когда она растянется на не один день
Konstantin
принято
Дмитрий
привет господа луашники
Дмитрий
На сталкер скрипты есть?
Дмитрий
А какой сталкер
usernameak
Дмитрий
Где можно проверить свои знания луа
Дмитрий
?
Дмитрий
алло люди
Дмитрий
хочу максимально изучить луа
Leon174
Дмитрий
Дмитрий
плохо английский знаю