<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>1) Can pinning not be exposed reasonably in the language?<BR>
I'll keep my pointer just a short time, in a local.<BR>
 <BR>
2) surely it could be done at an outer layer?<BR>
Make volatile locals for things you don't want enregistered?<BR>
 <BR>
Even the accessor function approach seems lame, given that I believe the Win32/x86 compiler doesn't inline.. :(<BR>
(does the gcc m3 inline across modules, or just compiles one at a time?)<BR>
<BR> - Jay<BR><BR>

<HR id=stopSpelling>
<BR>
> CC: jay.krell@cornell.edu; m3devel@elegosoft.com<BR>> From: hosking@cs.purdue.edu<BR>> Subject: Re: [M3devel] returning record by value vs. by ref?<BR>> Date: Sat, 1 Dec 2007 15:23:19 -0500<BR>> To: rodney.bates@wichita.edu<BR>> <BR>> Correct! Anytime you create an l-value pointer.<BR>> <BR>> On Dec 1, 2007, at 2:31 PM, Rodney M. Bates wrote:<BR>> <BR>> > Tony Hosking wrote:<BR>> >> I am assuming 's' here is an open array (REF ARRAY OF item) in <BR>> >> which case it is allocated in the GC'd heap. There is certainly <BR>> >> no way of safely getting an interior pointer to items in the <BR>> >> stack in Modula-3 -- at least not one that you can upward expose <BR>> >> (to callers) via return from a procedure. The difficulty in <BR>> >> doing this is that the GC moves objects around and would need to <BR>> >> know where your manufactured interior pointer is being held and <BR>> >> to which *object* (ie, the open array in this case) it refers so <BR>> >> that it can 'fix' the pointer when the array object moves. <BR>> >> Modula-3 provides a small concession to obtaining downward <BR>> >> exposed interior pointers using the VAR parameter mode. For <BR>> >> example you can pass 's[i]' as an actual parameter to a VAR mode <BR>> >> formal, effectively passing a pointer to the callee. GC can cope <BR>> >> with this in one of two possible ways: 1) "Pin" the array so that <BR>> >> it cannot be moved while the interior pointer is held on the <BR>> >> stack or registers of any thread (this is the approach that CM3's <BR>> >> conservative collector uses for now); or 2) track the creation of <BR>> >> such interior pointers and how they are derived from base object <BR>> >> references for use during GC. 2) requires much more co-operation <BR>> >> from the compiler than the current gcc-based backend (with all of <BR>> >> its lovely optimizations and register allocation) is capable of <BR>> >> doing. 1) is very cheap and does not impede optimizations and <BR>> >> register allocation.<BR>> ><BR>> > Presumably, this all also applies WITH-bound identifiers, when they <BR>> > are<BR>> > designators of interior components of heap objects? Are there any <BR>> > other<BR>> > cases?<BR>> ><BR>> > -- <BR>> > -------------------------------------------------------------<BR>> > Rodney M. Bates, retired assistant professor<BR>> > Dept. of Computer Science, Wichita State University<BR>> > Wichita, KS 67260-0083<BR>> > 316-978-3922<BR>> > rodney.bates@wichita.edu<BR>> <BR><BR><br /><hr />Your smile counts. The more smiles you share, the more we donate. <a href='www.windowslive.com/smile?ocid=TXT_TAGLM_Wave2_oprsmilewlhmtagline' target='_new'>Join in!</a></body>
</html>