8

Rubycallccは現在の継続をキャプチャします。これを後で呼び出してコントロールを復元できますが、データは復元できません。現在の記憶のイメージとともに、現在の続きを捉えたいと思います。

ヒープをキャプチャすることはそれほど難しくないように思えます。ObjectSpace::each_objectObjectSpace::dump_all、またはMarshal.dump、または単にに頼ることができますObject.clone。ただし、ヒープを復元する簡単な方法はわかりません。理想的には、object_id -> object マップをトラバースして、すべてのオブジェクトの古いイメージを復元します(対応するオブジェクトが GC されていobject_idた場合は再度追加します)。object_id当然のことながら、これを可能にする Ruby レベルの API はありません。私が使用できる Ruby の GC への低レベルのフックがあるかどうか疑問に思っています。

代替アプローチに関する提案を含め、どんな助けも大歓迎です。

4

2 に答える 2