Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Serializing Ruby code

Reply
Thread Tools

Serializing Ruby code

 
 
Victor \Zverok\ Shepelev
Guest
Posts: n/a
 
      12-03-2006
Hi all.

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?)

It can be really cool. And it seems completely possible.

V.

1. http://www.ruby-doc.org/core/classes/Marshal.html
2. http://rubyforge.org/projects/parsetree
3. http://seattlerb.rubyforge.org/ruby2ruby/


 
Reply With Quote
 
 
 
 
Chris Pearl
Guest
Posts: n/a
 
      12-03-2006
If I understand your question correctly, what you're looking for is
serializable continuations.

I've checked this a while back, and the current stable Ruby branch
(1.8.x) does not have those, though it supports continuations
themselves. There are no plans to add serialization for continuations
in this branch, afaik. Perhaps it would be added in the future Ruby
implementations (at least in some of those ) but here's where the
implementation developers chime in...

-Chris

On 12/3/06, Victor Zverok Shepelev <(E-Mail Removed)> wrote:
> Hi all.
>
> 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?)
>
> It can be really cool. And it seems completely possible.
>
> V.
>
> 1. http://www.ruby-doc.org/core/classes/Marshal.html
> 2. http://rubyforge.org/projects/parsetree
> 3. http://seattlerb.rubyforge.org/ruby2ruby/
>
>
>


 
Reply With Quote
 
 
 
 
Eric Hodel
Guest
Posts: n/a
 
      12-03-2006
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 - http://www.velocityreviews.com/forums/(E-Mail Removed) - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Serializing Python compiled code. renjipanicker@gmail.com Python 2 12-11-2007 06:59 AM
Serializing beans. Change in code makes old files unreadable. Andoni Java 2 08-19-2005 09:21 PM
Thread safety: Serializing access to ruby interpreter- again Thomas Sondergaard Ruby 5 09-24-2003 10:06 AM
serializing a class & performance -- advice? Jason Shohet ASP .Net 4 07-29-2003 06:47 PM
Serializing classes derived from dataset Aidan Glendye ASP .Net 1 07-28-2003 02:29 PM



Advertisments