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