El Pluto library para Lua afirma que puede serializar co-rutinas de Lua. Interpreto esto como el significado de "continuaciones serializables", que es una característica importante para hacer que la programación asincrónica sea escribible en un estilo sincrónico.¿Uso en el mundo real de las co-rutinas Lua/serialización de continuación para simplificar la lógica asíncrona?
Por ejemplo, un flujo de trabajo se puede expresar de forma lineal en lugar de exigir nombrado puntos de entrada
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)
en lugar de
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!")
Mientras que si las declaraciones se tradujo en el estilo anterior no son malas, las cosas se ponen muy complicado una vez que involucre variables locales, bucles, llamadas a funciones anidadas, etc.
Aquí es donde las continuaciones seriales se vuelven críticamente importante.
Serialized continuations se utilizan en JavaFlow, Cocoon (Rhink), Seaside, PLT Scheme, SICS, y son ideales para hacer frente a flujos de trabajo empresariales, diagnósticos médicos y (en mi caso), juegos de aventuras textuales.
¿Hay algún ejemplo (esperemos que sea de código abierto) de Lua y Pluto aprovechando sus funciones de esta manera, utilizando las continuas para simplificar la lógica en un entorno asíncrono?
Gracias, yo no había oído hablar de Tir antes! –