[M3devel] returning record by value vs. by ref?

Rodney M. Bates rodney.bates at wichita.edu
Sat Dec 1 20:31:39 CET 2007



Tony Hosking wrote:
> I am assuming 's' here is an open array (REF ARRAY OF item) in which  
> case it is allocated in the GC'd heap.  There is certainly no way of  
> safely getting an interior pointer to items in the stack in Modula-3  -- 
> at least not one that you can upward expose (to callers) via  return 
> from a procedure.  The difficulty in doing this is that the GC  moves 
> objects around and would need to know where your manufactured  interior 
> pointer is being held and to which *object* (ie, the open  array in this 
> case) it refers so that it can 'fix' the pointer when  the array object 
> moves.  Modula-3 provides a small concession to  obtaining downward 
> exposed interior pointers using the VAR parameter  mode.  For example 
> you can pass 's[i]' as an actual parameter to a  VAR mode formal, 
> effectively passing a pointer to the callee.  GC can  cope with this in 
> one of two possible ways: 1) "Pin" the array so  that it cannot be moved 
> while the interior pointer is held on the  stack or registers of any 
> thread (this is the approach that CM3's  conservative collector uses for 
> now); or 2) track the creation of  such interior pointers and how they 
> are derived from base object  references for use during GC.  2) requires 
> much more co-operation  from the compiler than the current gcc-based 
> backend (with all of its  lovely optimizations and register allocation) 
> is capable of doing.   1) is very cheap and does not impede 
> optimizations and register  allocation.
> 

Presumably, this all also applies WITH-bound identifiers, when they are
designators of interior components of heap objects?  Are there any other
cases?

-- 
-------------------------------------------------------------
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