Ruby's callcc
acquisisce la continuazione corrente, che può essere successivamente richiamata per ripristinare il controllo, ma non i dati. Vorrei catturare la continuazione corrente insieme all'immagine corrente della memoria.Checkpoint e ripristino heap in Ruby
Mi sembra che catturare il mucchio non dovrebbe essere molto difficile; Posso contare su ObjectSpace::each_object
e ObjectSpace::dump_all
, o Marshal.dump
, o semplicemente su Object.clone
. Tuttavia, non vedo alcun modo diretto per ripristinare l'heap. Idealmente, mi piacerebbe attraversare la mappa object_id -> object
, ripristinando la vecchia immagine dell'oggetto per ogni object_id
(e aggiungere nuovamente lo object_id
se l'oggetto corrispondente era stato GC'd). Non sorprende che non ci sia una API a livello di Ruby che mi permetta di farlo. Mi chiedo se ci sono ganci di basso livello per il GC di Ruby che posso usare.
Qualsiasi aiuto è apprezzato, compresi suggerimenti su approcci alternativi.