From: Eric Hodel Date: 2006-12-03T13:01:15+09:00 Subject: Re: Serializing Ruby code On Dec 2, 2006, at 19:06 , Victor Zverok Shepelev wrote: > A bit of philosophy. > > We have Marshal[1] to serializing Ruby's objects (and also YAML and > so on). > AFAIK, Rails community even uses objects serialization for > program's state > saving. > But, existing marshalling/serialization can serialize only data, > not plain > code; this fact is restricting for their applications. For example, > Smalltalk-style "image" (entire program state, which can be loaded and > continued) is impossible. > > But! We have a method for translating code-to-data - ParseTree[2], > and we > even have method to translate back data-to-code (though a bit > roundabout) - > ruby2ruby[3]. > > Had somebody thought about gathering all this to create full > solution for > entire running program "saving" and "loading"? (Or, may be, > somebody already > done this and I'm missing?) You'd need more than that to get a full image to work (like recording the ObjectSpace, the symbol table, globals, ...) Also, ParseTree doesn't capture the closure so you can't copy the full state of the interpreter: $ cat closure.rb def make_proc x = 1 proc do |y| y + x end end p = make_proc puts p.call(2) require 'rubygems' require 'ruby2ruby' ruby = p.to_ruby puts ruby q = eval ruby puts q.call(2) $ ruby closure.rb 3 proc { |y| (y + x) } (eval):2: undefined local variable or method `x' for main:Object (NameError) from closure.rb:19:in `call' from closure.rb:19 -- Eric Hodel - drbrain@segment7.net - http://blog.segment7.net I LIT YOUR GEM ON FIRE!