Библиотека Плутона для Lua утверждает, что может сериализовать сопрограммы Lua.Я интерпретирую это как означающее «сериализуемые продолжения», что является важной особенностью для обеспечения возможности асинхронного программирования для записи в синхронном стиле.
Например, рабочий процесс может быть выражен линейно, а не требовать именованных точек входа
if (ask user is hungry) then
if (not ask user is vegetarian) then
if (ask user if likes_burgers) then
feed_user(burger)
else
tell_user("Picky!")
else
feed_user(salad)
вместо
function main()
ask(user is hungry, "hungry_response")
function hungry_response(answer)
if (answer is yes)
ask(user is vegetarian, "vegetarian_response")
function vegetarian_response(answer)
if (answer is yes)
feed_user(salad)
else
ask(user likes burgers, "burgers_response")
function burgers_response(answer)
if (answer is yes) then
feed_user(burger)
else
tell_user("Picky!")
Хотя операторы, переведенные в предыдущий стиль, неплохие, все становится очень сложно, если вы задействуете локальные переменные, циклы, вызовы вложенных функций и т. Д.
Здесь сериализуемые продолжения становятся критически важными.
Сериализованные продолжения используются в JavaFlow, Cocoon (Rhink), Seaside, PLT Scheme, SICS и отлично подходят для работы с бизнесом.рабочие процессы, медицинская диагностика и (в моем случае) текстовые приключенческие игры.
Есть ли примеры (надеюсь, с открытым исходным кодом!) Того, как Луа и Плутон используют свои возможности таким образом, используя продолжения для упрощения логики в асинхронной среде?