[M3devel] <*LAZYALIGN*>

Rodney M. Bates rodney.bates at wichita.edu
Tue Feb 12 04:29:30 CET 2008


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



More information about the M3devel mailing list