[M3devel] fewer wrappers/more C? (or a wash?)
    Rodney M. Bates 
    rodney.m.bates at cox.net
       
    Mon Apr 20 04:45:49 CEST 2009
    
    
  
hendrik at topoi.pooq.com wrote:
> On Fri, Apr 17, 2009 at 10:57:10PM +1000, Tony Hosking wrote:
>   
>> I am a little concerned about passing REFANY directly to C code as  
>> there is no guarantee that REFANY and C pointers will always be  
>> compatible.  ADDRESS can more safely be assumed compatible.
>>     
>
> Indeed, I once read the X toolkit specs, and it was rife with small 
> integers being packed into pointers.  Apparently the toolkit resolved 
> it not by a tag bit, but by its magnitude.  There was some constant 
> somewhere that identified which numbers were small enough to be 
> considered not-pointers.
>
> This was a discrimination without a tag bit.  Similar concept to what 
> we're planning for the future of REFANY, but different implementation.
>
> I don't know how they figured out which pointer values were safe to 
> treat as integers.
>   
In my more elaborate "safe" proposal, at least, the language itself
does not specify anything about what the bit-encodings of tagged
types are.  It's an implementors' option, and the language
can support whatever the implementors choose. 
This could be used to match the X toolkit's encoding.  However,
using the lsb takes advantage of the fact that heap objects must
always be aligned and thus the lsb is already always zero, when
it's really a heap pointer.  That seems like by far the most efficient
encoding.
> -- hendrik
>
>
>   
    
    
More information about the M3devel
mailing list