[M3devel] Using REFANYs to store integers?

Tony Hosking hosking at cs.purdue.edu
Mon Dec 10 23:51:29 CET 2007


The LSB trick is something that one could teach the current  
implementation to handle, but I note that there is *nothing* in the  
language definition that would mean this hack could ever be  
portable.  Moreover, there is reason to expect that a particular GC  
implementation might use this same trick internally, in which case  
you have a conflict between your hack and that implementation.   
Basically, you should not assume *any* particular representation for  
REFANY in Modula-3.  For example, an implementation would be free to  
use a level of indirection (ie, "handles" or an object table) to  
implement M3 REFANY.  In sum, I think what you propose is a nasty  
hack.  Better to implement your own GC anyway, since it is likely to  
be much better to exploit the semantics of your interpreter/language  
for best behavior.

On Dec 10, 2007, at 3:21 PM, Mika Nystrom wrote:

> Hi Rodney,
>
> You're reading my mind.  What I am thinking of doing is that I want
> to optimize the handling of small integers (only), exactly the way
> it's done in Smalltalk, that is, immutable, single-instance objects.
> And only the interpreter will ever dereference the objects, so it
> would check the LSBs---if they are set to zero, it will assume that
> it's a heap object, if anything else, it's a special immutable value
> of some sort.
>
> I'm well aware it's a very dirty trick to attempt!  But I was
> thinking that by doing this sort of thing I could avoid having to
> code my own garbage collector.  I'm not surprised that the current
> garbage collector has issues with it but I also cannot think of a
> reason why one couldn't make it ignore unaligned "pointers" unless
> the trick is already used for some purpose I am not aware of.
>
>     Mika
>
> "Rodney M. Bates" writes:
>> I presume "pointers" that are not 0 MOD 4 "refer to" some kinds
>> of immutable, single-instance objects and don't actually point
>> to heap objects in need of collection, as in Smalltalk?  I would
>> think it would be a simple modification of the existing M3 GC to
>> just make it ignore words containing misaligned pointers.
>>
>> Will only interpreted bytecode ever dereference these pointers?
>> Or does M3 compiler-generated code also dereference them?  Then
>> the compiler would also have to generate checks and do whatever
>> with misaligned pointers.
>>
>> Mika Nystrom wrote:
>>> Hello Modula-3ers...
>>>
>>> I have a question about garbage collecting, pointers, and dirty
>>> tricks that I'm curious if anyone (Tony??) can answer.
>>>
>>> Here it is.  I am considering writing a bytecode interpreter that
>>> is to run mixed into a Modula-3 environment, that is, it will be
>>> able to deal with bytecodes as well as Modula-3 objects.  There is
>>> no problem with that of course, as bytecodes are "code" and Modula-3
>>> objects are "objects" and can live on separate stacks.  However,
>>> as an optimization (not an uncommon one in these types of systems),
>>> I'd like a space and time efficient representation for "small
>>> integers".  A tried-and-true method (it goes back at least to the
>>> Smalltalk-80 runtime) is to realize that pointers (in my case
>>> REFANYs) always point to word-aligned addresses.  We can then use
>>> integers that are congruent to 1, 2, and 3 (mod 4) to represent
>>> other types of data.
>>>
>>> What will happen if I LOOPHOLE such integers back and forth to
>>> REFANY?  Will the garbage collector just ignore them?  I wrote a
>>> test program that does it and it doesn't crash... except when you
>>> hit ctrl-C, it often dies with an assertion failure in
>>> RTCollector.m3.. (This both with my ancient PM3 on FreeBSD and a
>>> relatively recent update of CM3 on PPC_DARWIN.)  If the garbage
>>> collector somehow disapproves of these integers, is there any
>>> conceivable thing that would be broken by making necessary  
>>> adjustments
>>> to the garbage collector such that it would just ignore them?
>>> Or is there a better way of solving my problem?
>>>
>>>       Best regards,
>>>         Mika
>>>
>>
>> -- 
>> -------------------------------------------------------------
>> 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