Marshal_load, marshal_dump

Currently RMagick uses the old _dump and _load methods to
marshal/unmarshal images. I’d like to start using the new marshal_load
and marshal_dump methods. What is the impact of switching? Can I just
replace _dump and _load with marshal_dump and marshal_load? Suppose I
have an image that was dumped using an old version of RMagick. How do I
support loading it?

Hi,

In message “Re: marshal_load, marshal_dump”
on Sun, 14 Dec 2008 07:36:18 +0900, Tim H. [email protected]
writes:

|Currently RMagick uses the old _dump and _load methods to
|marshal/unmarshal images. I’d like to start using the new marshal_load
|and marshal_dump methods. What is the impact of switching? Can I just
|replace _dump and _load with marshal_dump and marshal_load? Suppose I
|have an image that was dumped using an old version of RMagick. How do I
|support loading it?

marshal_dump has high priority over _dump, so you can keep _load as
long as you want backward compatibility.

          matz.

On Dec 13, 2008, at 14:36 PM, Tim H. wrote:

Currently RMagick uses the old _dump and _load methods to marshal/
unmarshal images. I’d like to start using the new marshal_load and
marshal_dump methods. What is the impact of switching? Can I just
replace _dump and _load with marshal_dump and marshal_load? Suppose
I have an image that was dumped using an old version of RMagick. How
do I support loading it?

Note that _dump/_load occurs before allocate and marshal_dump/
marshal_load occurs after. In some instances this is an important
distinction.

On Dec 15, 2008, at 17:20 PM, Tim H. wrote:

distinction.

Absolutely. I wish I could find some examples of custom marshal_dump/
marshal_load implementations. Searching thru the 1.8.7/1.9.1 sources
didn’t turn up anything illuminating.

Look in RubyGems. Gem::Specification, Gem::Version and
Gem::Requirement have custom marshal methods.

Eric H. wrote:

marshal_dump/marshal_load occurs after. In some instances this is an
important distinction.

Absolutely. I wish I could find some examples of custom
marshal_dump/marshal_load implementations. Searching thru the
1.8.7/1.9.1 sources didn’t turn up anything illuminating.

Look in RubyGems. Gem::Specification, Gem::Version and Gem::Requirement
have custom marshal methods.

Excellent! Thanks for the pointer.

Eric H. wrote:

important distinction.

Absolutely. I wish I could find some examples of custom
marshal_dump/marshal_load implementations. Searching thru the
1.8.7/1.9.1 sources didn’t turn up anything illuminating.

Tim H. wrote:

Absolutely. I wish I could find some examples of custom
marshal_dump/marshal_load implementations. Searching thru the
1.8.7/1.9.1 sources didn’t turn up anything illuminating.

A very simple one:

class C
attr_accessor :x, :y

def marshal_dump
[x, y]
end

def marshal_load(ary)
@x, @y = ary
end
end

c = C.new
c.x = “foo”
c.y = “bar”

s = Marshal.dump©
p Marshal.load(s)