Ruby's callcc
фиксирует текущее продолжение, которое впоследствии можно вызвать для восстановления элемента управления, но не для данных. Я хотел бы зафиксировать текущее продолжение вместе с текущим изображением памяти.Контрольная точка и восстановление кучи в Ruby
Мне кажется, что захват кучи не должен быть очень трудным; Я могу положиться на ObjectSpace::each_object
и ObjectSpace::dump_all
, или Marshal.dump
, или просто Object.clone
. Однако я не вижу прямого способа восстановить кучу. В идеале, я хотел бы пересечь карту object_id -> object
, восстановив старое изображение объекта за каждые object_id
(и повторное добавление object_id
, если соответствующий объект был GC'd). Неудивительно, что на Api нет уровня Ruby, который позволяет мне это делать. Мне интересно, есть ли крючки низкого уровня для GC Ruby, которые я могу использовать.
Любая помощь приветствуется, включая предложения об альтернативных подходах.