LuaのPluto ライブラリは、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!")
以前のスタイルに変換された if ステートメントは悪くありませんが、ローカル変数、ループ、ネストされた関数呼び出しなどが含まれると、事態は非常に複雑になります。
ここで、シリアライズ可能な継続が非常に重要になります。
シリアル化された継続は、JavaFlow、Cocoon (Rhink)、Seaside、PLT スキーム、SICS で使用され、ビジネス ワークフロー、医療診断、および (私の場合) テキスト アドベンチャー ゲームの処理に最適です。
Lua と Pluto がこのように機能を活用し、非同期環境でロジックを簡素化するために継続を使用する例 (オープン ソースを希望します!) はありますか?