Как при помощи сопрограмм (корутин) определить что функция зависла?

Я вроде как уже изучил lua досконально, но последнее, чего я не понимаю - это корутины.

Передо мной сейчас стоит такая задача: мой главный скрипт подключает сторонний модуль, который работает в защищённом окружении. Злоумышленник не может сделать ничего плохого из этого модуля, потому что ему не доступны никакие функции или переменные. Но единственная пакость, которую он может устроить - это зависнуть: while true do end. По этому я должен обернуть функцию сопрограммой c таймером, который просто отсчитывает пару секунд и если за это время функция ещё не завершилась - убить её и выбросить ошибку. Помогите пожалуйста.


Ответы (1 шт):

Автор решения: Beast Winterwolf

Я согласен со всем, что написал @AndrejLevkovitch в комментариях – коорутины в данном случае не помогут.

Решения у данной задачи два: если у вас в приоритете производительность, то используйте что-нибудь вроде cjson.

Если же хотите использовать родные lua-таблицы, то сгодится любой сериализатор, например lume.deserialize. Он работает не медленнее интерпретатора, но не быстрее чем cjson.

→ Ссылка