Size: a a a

2019 September 27

АК

Александр Караев in pro.lua
Так это работать не должно
источник

АК

Александр Караев in pro.lua
Я изначально ни о каких тредах и не задумывался. Но потом выяснилось, что каждой корутине нужен отдельный execution контекст. И я даже нашёл реализацию
источник

S

Snusmumriken in pro.lua
Ой мама, а что мешает это вывести в луёвую часть?
источник

АК

Александр Караев in pro.lua
А если вывести, то проблем не будет?
источник

S

Snusmumriken in pro.lua
(нет)
источник

АК

Александр Караев in pro.lua
Я уже и сам начал сильно сомневаться во всех своих убеждениях и знаниях
источник

S

Snusmumriken in pro.lua
Самое простое — зашить луёвый скрипт строкой в плюсовый код, и исполнить его перед выдачей луа-стейта в работу через lua_call ))
источник

АК

Александр Караев in pro.lua
Мне кажется логичным, что каждой корутине нужен отдельный execution контекст. Хранить стек, как минимум
источник

S

Snusmumriken in pro.lua
Да, действительно, у каждой корутины есть свой стек и стейт областей видимости. Но помнится, дочерние луа-стейты не создаются.
источник

S

Snusmumriken in pro.lua
А, пардон, я сел в лужу, корутины и есть дочерние стейты ))
источник

S

Snusmumriken in pro.lua
Снус сломался, несите нового
источник

АК

Александр Караев in pro.lua
Нет, лучше почините этого, иначе сломаюсь я
источник

АК

Александр Караев in pro.lua
Ну тогда вопрос актуален - если у каждой переменной есть свой L, то есть и переменные с L от потока, где она была создана, то как происходит передача владения?
источник

S

Snusmumriken in pro.lua
Вот щас смотрю.
источник

S

Snusmumriken in pro.lua
Но в целом, корутины должны быть урезанным основным потоком. Создавать "глобальные" переменные в главном стейте, и только при лукапе смотреть на собственные локальные переменные. Я потому и подозревал что этого тут нема, потому что работаем с основным тредом практически постоянно.
источник

АК

Александр Караев in pro.lua
источник

АК

Александр Караев in pro.lua
Advanced used: Furthermore, for every single sol::reference derived type, there exists a version prefixed with the word main_, such as sol::main_table, sol::main_function, sol::main_object and similar. 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.
источник

АК

Александр Караев in pro.lua
Из этого можно сделать вывод, что объект, который принадлежит стейту корутины, действительно может пережить корутину
источник

S

Snusmumriken in pro.lua
Тады обnilяй всё содержимое корутины, а в конце вызываей collectgarbage().
источник

АК

Александр Караев in pro.lua
Я уже обернул свою S в sol::main_table вместо sol::table, благодаря чему при присваивании S = some_coro_local_object владелец передаётся в основной стейт
источник