Rubycallcc
は現在の継続をキャプチャします。これを後で呼び出してコントロールを復元できますが、データは復元できません。現在の記憶のイメージとともに、現在の続きを捉えたいと思います。
ヒープをキャプチャすることはそれほど難しくないように思えます。ObjectSpace::each_object
とObjectSpace::dump_all
、またはMarshal.dump
、または単にに頼ることができますObject.clone
。ただし、ヒープを復元する簡単な方法はわかりません。理想的には、object_id -> object
マップをトラバースして、すべてのオブジェクトの古いイメージを復元します(対応するオブジェクトが GC されていobject_id
た場合は再度追加します)。object_id
当然のことながら、これを可能にする Ruby レベルの API はありません。私が使用できる Ruby の GC への低レベルのフックがあるかどうか疑問に思っています。
代替アプローチに関する提案を含め、どんな助けも大歓迎です。