[M3devel] <*LAZYALIGN*>
Rodney M. Bates
rodney.bates at wichita.edu
Thu Feb 14 23:56:13 CET 2008
OK. So would my proposal 1) below suffice, that the alignment rules are a
property of a type and thus the same for every variable of that type?
More immediately relevant, is it true that nothing that uses LAZYALIGN rules
is ever pickled? I believe current pickles will trash things badly if that
happens. Fixing this without invalidating existing pickles and/or compiled
code looks tricky.
If nothing LAZYALIGN is pickled, I am hoping to be able to come up with
a scheme that will fix pickles, not require rewriting of any already existing
pickle files or recompilation of existing object code, and yet not introduce
any new bugs involving old pickles/code.
Maybe I should just postpone this one until after LONGINT in pickles is supported
(only with STRICTALIGN, as now for other types.)
Darko wrote:
> That's not quite right. Certain Mac API structures need to be aligned
> to Motorola 68K alignment for historical reasons. All other structures
> should use normal alignment to be compatible with C and Unix
> interfaces. The alignment change was implemented to be supported only
> in packed structures as a natural and intuitive way to "force"
> alignment. You could view it as a bug fix to overly restrictive
> alignment rules in packed structures.
>
>
> On 12/02/2008, at 2:46 PM, Rodney M. Bates wrote:
>
>> It sounds like all that Mac OS X needs is for _all_ types in an entire
>> program to use the liberal packing rules. Have I understood correctly?
>> I would have no grief over that.
>>
>> Darko wrote:
>>
>>> The liberalised alignment rules are required for the native Mac OS
>>> X API and should stay. You cannot use that API without them. I
>>> think the pragma is not required and can be removed. I agree with
>>> all the points you make. The effect of the modified alignment rules
>>> it to allow *packed* structures to have members aligned on byte
>>> boundaries. This has the effect of packing the fields in the
>>> tightest arrangement allowed by the platform. This might affect
>>> performance, but if the user is concerned about this they should
>>> specify field bit sizes that deliver improved performance. I don't
>>> see a need to specify this on a structure level, for the reasons
>>> you give and because the difference isn't significant enough in the
>>> case of packed structures and their physical layout and
>>> restrictions are platform dependent anyway.
>>> I might also add that the alignment code is currently broken on
>>> I386_DARWIN.
>>> - Darko
>>> On 11/02/2008, at 8:55 AM, Rodney M. Bates wrote:
>>>
>>>> Does anybody know about the status of pragma <*LAZYALIGN*>? Is it
>>>> being used anywhere?
>>>>
>>>> It is not documented in pragmas.html. The compiler front end appears
>>>> to accept it. (In fact, Decls.m3 contains constants that suggest
>>>> limitations on what declarations the pragma can appear on, but these
>>>> are not actually enforced.) It liberalizes the alignment rules,
>>>> generally allowing scalars to start on any byte boundary.
>>>>
>>>> Pickles have to be able to reconstruct the layout of types as the
>>>> compiler would have done it for a machine (on which a now-being-read
>>>> pickle was written) with different word size and alignment properties.
>>>> Currently, pickles are completely unaware of lazy alignment. It
>>>> would have to be encoded in type descriptions generated by the
>>>> compiler
>>>> using TipeDesc and read by pickles using RTTipe.
>>>>
>>>> Most troubling to me is what looks like a linguistic Pandora's box.
>>>> The pragma can be associated with any constant, variable, or type
>>>> _declaration_ (not type definition), with the result that different
>>>> values of the same type can actually be different in their alignment
>>>> rules and thus their layout. Similarly for different identifiers
>>>> equated to the same type. Although the effects of this could possibly
>>>> be hidden from the programmer in purely safe code, not so with unsafe
>>>> code. I haven't thoroughly thought this through, but seems to me to
>>>> really fly in the face of the whole typing philosophy of the language.
>>>>
>>>> For example, if pickles were to read in an object value, and there
>>>> were >1 variants of the object's type in the reading program,
>>>> differing
>>>> only in the alignment rules, how would it decide which one to build?
>>>> In fact, ignoring pickles altogether and just looking at a single
>>>> program,
>>>> if the object's type doesn't actually uniquely give its memory layout,
>>>> how can it be accessed correctly?
>>>>
>>>> Additionally, a quick look at the compiler suggests it won't generate
>>>> correct code for whole record assignment when the LHS and RHS are the
>>>> same type but have different alignment characteristics.
>>>>
>>>> The more I think about it, it seems the only workable
>>>> possibilities are:
>>>>
>>>> 1) Require the pragma to be associated only with a type
>>>> _definition_ not a
>>>> declaration (e.g., allow RECORD <*LAZYALIGN*> ... END) and make
>>>> this a
>>>> property of the type that propagates to all names for the type and
>>>> all variables, constants, etc. Also, this would make this property
>>>> a part of the type signature that pickles uses when reading, -OR-
>>>>
>>>> 2) Forget it altogether.
>>>>
>>>> What do people think?
>>>> --
>>>> -------------------------------------------------------------
>>>> 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
>
>
>
--
-------------------------------------------------------------
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
More information about the M3devel
mailing list