7 авг. 2009 г.

Lua Núcleo: coro.yield_outer

Обновил мастер Lua Núcleo.

Добавил модуль coro для прозрачного проброса yield'а вверх по цепочке корутин.

Корутины нередко используются для передачи управления наружу из Lua. Например, для работы по сети, когда Lua'шный стейт откладывается в пул до получения ответа, а по получении ответа делается resume. В этом случае все сетевые операции в Lua делают yield.

В обычном случае это делает невозможным использование этих сетевых операций внутри пользовательских корутин. Если же пользоваться новым модулем, это ограничение снимается. Для этого нужно:
  1. Для всех пользовательских корутин вызывать coro.resume_inner вместо coroutine.resume.
  2. Во всех сетевых операциях вызывать coro.yield_outer вместо coroutine.yield.
  3. В пользовательском коде использовать coro.pcall вместо pcall-а.
  4. Результат coroutine.resume во внешней корутине перед обработкой пропускать через функцию coro.eat_tag.
Также перетянул работу Георгия: tserialize и tdeepequals; обе функции — с поддержкой рекурсивных таблиц.

Комментариев нет: