[M3devel] <*LAZYALIGN*>
Olaf Wagner
wagner at elegosoft.com
Fri Feb 15 22:32:05 CET 2008
Perhaps we should check-in this description somewhere near the
actual code? Or is there enough documentation already?
Olaf
PS: Based on your description, I'd say we should abandon LAZYALIGN.
Or at least put a big sticker on that it will break pickles.
Quoting "Rodney M. Bates" <rodney.bates at wichita.edu>:
> The word "Packing" in RTPacking is perhaps misleading. Using BITSIZE,
> etc. only works for getting object layouts as on the machine executing
> the code, which is all that is needed when writing a pickle.
>
> When reading, Pickle code needs to know the layouts of a type both as
> it is on the reading machine and as it was on the machine that wrote
> the pickle. The type description that the compiler generates is
> excerpted and contains no field displacements, just lists of field
> types (which are either recursive type descriptions or builtin types).
> So it is independent of word sizes, etc.
>
> Pickles regenerates the displacements using the few target machine
> characteristics in a RTPacking.T It traverses a type description and
> simultaneously computes two sets of field displacements, both as they
> are on the reading machine and on the writing machine. For the latter,
> the value of RTPacking.T is (after a compact bit encoding) stored in the
> header of the pickle file. For the former, it's gotten by techniques like
> using BITSIZE. This is actually all done in RTTipe, part of m3core, and
> called by Pickle code.
>
> This is very fragile. RTTipe has to duplicate the compiler's layout
> behavior. There is no shared code. Making it common would involve
> quite a bit of rework, as the two use substantially different data
> structure and code organization. It will be obvious what kind of bit
> damage could occur if the two algorithms didn't agree.
>
> This is why I am obsessing over LAZYALIGN. I have been comparing the
> field displacement computations in RTTipe and in the compiler. The
> former is oblivious to LAZYALIGN.
>
> Note that all this is required even without any packing of small fields
> within words. E.G., a record with two INTEGER fields, pickled on a
> 32-bit machine and unpickled on a 64.
>
> Tony Hosking wrote:
>> Rodney,
>>
>> Why does there need to be an entry for LONGINT in RTPacking? I
>> would have thought all packing is done on word-sized units anyway.
>> Each side of the connection can check BITSIZE(LONGINT) to figure
>> out what to do presumably no differently from the way INTEGER is
>> communicated between 32-bit and 64-bit machines. Am I missing
>> something?
>>
>> -- Tony
>>
>> On Feb 15, 2008, at 10:51 AM, Tony Hosking wrote:
>>
>>> Ah, OK. I don't much delve in pickle-land. Anything I can help with?
>>>
>>> On Feb 14, 2008, at 11:02 PM, Rodney M. Bates wrote:
>>>
>>>> 1) RTPacking.T and needs to have a separate size for LONGINT,
>>>> (which can vary independently of the size of INTEGER).
>>>> 2) Variable length values of subrange bounds found in type
>>>> descriptions (in TipeDesc.i3) can now have values beyond
>>>> what the native word size can represent.
>>>> 3) RTType.Kind.Longint (which I presume you, Tony, added recently)
>>>> is not handled by Pickles.
>>>>
>>>> I have done some coding on this, but have been interrupted.
>>>>
>>>> Tony Hosking wrote:
>>>>
>>>>> Why is LONGINT for pickles not yet supported?
>>>>
>>>>
>>>> --
>>>> -------------------------------------------------------------
>>>> Rodney M. Bates, retired assistant professor
>>>> Dept. of Computer Science, Wichita State University
>>>> Wichita, KS 67260-0083
>>>> 316-978-3922
>>>> rodney.bates at wichita.edu
>>
>>
>>
>
> --
> -------------------------------------------------------------
> Rodney M. Bates, retired assistant professor
> Dept. of Computer Science, Wichita State University
> Wichita, KS 67260-0083
> 316-978-3922
> rodney.bates at wichita.edu
--
Olaf Wagner -- elego Software Solutions GmbH
Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin, Germany
phone: +49 30 23 45 86 96 mobile: +49 177 2345 869 fax: +49 30 23 45 86 95
http://www.elegosoft.com | Geschäftsführer: Olaf Wagner | Sitz: Berlin
Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194
More information about the M3devel
mailing list