[M3devel] Pickles, TextLiterals, and word size

Rodney M. Bates rodney_bates at lcwb.coop
Wed Jul 24 22:59:12 CEST 2013



On 07/24/2013 12:14 PM, Rodney M. Bates wrote:
>
>
> On 07/24/2013 10:34 AM, Hendrik Boom wrote:
>> On Wed, Jul 24, 2013 at 09:10:31AM -0500, Rodney M. Bates wrote:
>>> There is what I would call a bug in TextLiteral.i3 whose effect is that a
>>> TextLiteral.T has a different fingerprint on 32- and 64-bit machines.
>>> So you can't pickle a Text literal on one word-sized machine and unpickle
>>> it on the other.
>>>
>>> But fixing this will have the effect of invalidating any existing pickles
>>> written on a 64-bit machine before the fix, so they can't be read after
>>> the fix, even on a 64-bit machine.  They would have to be rewritten after
>>> the fix.
>>
>> Ah!  The problems of long-term compatibility!
>>
>> Is there any way of looking at a a pickle and determining whether it
>> comes from a 32- of 64- bit machine?
>
> Yes, the pickle contains word size, LONGINT/LONGCARD size, floating
> point representation, endianness, lazy alignment, maximum alignment,
> record alignment, and now, widechar size, all for the system it was
> written on.
>
>
>>
>> It there a way of special-casing the specific fingerprint that's about
>> to be invalidated, so as to convert it properly on input only, while
>> generating the new one on output?
>>
>
> Yes, I thought about this.  It would not be hard to find out what the
> two fingerprints are and test one read from a pickle against these values.
>
> But the problem is, there is an unbounded set of types that would depend
> indirectly on this, and they can't all be accounted for.  Using, e.g.,
> BITSIZE(INTEGER) as a bound in a range is the way this is happening
> it the subject case.
>
> Hmm, maybe I could just do the specific derived fingerprints for a
> TextLiteral.T, and that would be good enough.  Let the programmer be
> responsible for other types.  I think it would fix the immediate
> problem without undermining anything existing.

No, that won't work either.  That would only fix the case where the
TextLiteral is the top-level, and thus only, "object" in a pickle.
Not very likely.  When the TextLiteral is a field/element of some
containing object, it is the topmost object in the entire pickle
whose fingerprint is used to find the type in the reading program.

Actually, pickling a TextLiteral might not be very common at all.



>
> I already have file dumps I can dig the values out of.  I'll look
> into that.  Thanks!
>
>
>>>
>>> Is anybody doing the latter?  Would having to recreate your pickles be a
>>> problem?  Apparently, nobody is going cross-word-size, or we'd have heard
>>> about it.
>>>
>>> I would like to fix it properly, but don't want to undermine anybody's
>>> working system.
>>>
>>
>
>




More information about the M3devel mailing list