Как при помощи сопрограмм (корутин) определить что функция зависла?
Я вроде как уже изучил lua досконально, но последнее, чего я не понимаю - это корутины.
Передо мной сейчас стоит такая задача: мой главный скрипт подключает сторонний модуль, который работает в защищённом окружении. Злоумышленник не может сделать ничего плохого из этого модуля, потому что ему не доступны никакие функции или переменные. Но единственная пакость, которую он может устроить - это зависнуть: while true do end. По этому я должен обернуть функцию сопрограммой c таймером, который просто отсчитывает пару секунд и если за это время функция ещё не завершилась - убить её и выбросить ошибку. Помогите пожалуйста.
Ответы (1 шт):
Я согласен со всем, что написал @AndrejLevkovitch в комментариях – коорутины в данном случае не помогут.
Решения у данной задачи два: если у вас в приоритете производительность, то используйте что-нибудь вроде cjson.
Если же хотите использовать родные lua-таблицы, то сгодится любой сериализатор, например lume.deserialize. Он работает не медленнее интерпретатора, но не быстрее чем cjson.