Robert Feldt wrote:

> On Thu, 19 Jun 2003, Rasputin wrote:
> 
> 
>>* Martin DeMello <martindemello / yahoo.com> [0636 20:36]:
>>
>>>Mark Wilson <mwilson13 / cox.net> wrote:
>>>
>>>>On Wednesday, June 18, 2003, at 01:55 PM, Martin DeMello wrote:
>>>>
>>>>
>>>>>Would including readers for older marshal formats somewhere in the
>>>>>distribution make sense? I can definitely imagine scenarios where my
>>>>>marshalled data might outlive my ruby version.
>>>>
>>>>Or better yet (perhaps), an "on-the-fly" converter of older formats to
>>>>the newer format.
>>>
>>>I'm unconvinced this is better - we don't want to encourage data to hang
>>>around in the old format, after all.
>>
>>Is there currently a 'format version' field recorded with the
>>object somewhere? That lets future generations decide for you.
>>
> 
> As this indicates
> 
> $ ruby -v -e 'p Marshal.dump(nil).unpack("H*")'
> ruby 1.8.0 (2003-06-14) [i386-mingw32]
> ["040830"]
> 
> $ ruby -e 'p Marshal.dump(true).unpack("H*")'
> ["040854"]
> 
> $ ruby -e 'p Marshal.dump(1).unpack("H*")'
> ["04086906"]
> 
> the first two bytes are version info of some sort. Taking a look in
> marshal.c reveals the major active lines:
> 
>     w_byte(MARSHAL_MAJOR, &arg);
>     w_byte(MARSHAL_MINOR, &arg);
> 
>     rb_ensure(dump, (VALUE)&c_arg, dump_ensure, (VALUE)&arg);
> 
>     return port;
> }
> 
> and
> 
> #define MARSHAL_MAJOR   4
> #define MARSHAL_MINOR   8
> 
> which indicates that the first byte is the major rev number and the 2nd
> one is the minor rev number. Looking a bit further indicates that the 3rd
> byte seems to be used to indicate class of the object => nil/true/false
> need only three bytes to be uniquely spec'ed. Looking even further (ok
> last time ;)) reveals that Marshal.load bails out if major rev is not same
> as the expected one or if minor is higher than expected one.
> 
> Would be interesting to know how many minor rev's there has been for the
> major rev numbers before 04?
> 
> Regards,
> 
> Robert
> 
> 

MOD PARENT UP +5 nformative

.... uhm... wrong forum, ignore me...

/Anders

-- 
dc -e 
4dd*od3*dddn1-89danrn10-dan3+ann6*dan*2*an13dn1+dn2-dn3+5*ddan2/9+an13nap