Sam Mason wrote:
> On Tue, Mar 11, 2008 at 09:09:39AM -0400, Jonathan S. Shapiro wrote:
>> Problem: BY-REF parameters can escape:
>>
>>   (define (outer x:'a)
>>     (define (capture xc:(by-ref 'a))
>>       (lambda (y)
>>          (pair y, x)))
>>
>> Note that "x" is in the call frame of OUTER, it is aliased by "xc", "xc"
>> is in turn captured by the lambda, and the lambda escapes. This is bad,
>> because we now have a heap-based object (the closure) that points back
>> into a stack-based object.
> 
> If I understand, once by-ref's have been included you've pretty much
> subverted your value/ref dichotomy.  I.e. it's the strong distinction
> between value and ref's that ensure type safety and by-ref allows value
> types to be propagated to refs.
> 
> As another, much more complicated solution, how about some limited form
> of region typing.  Each pointer would be annotated with the (highest)
> stack frame it came from and if a pointer ever escapes from a frame
> with the same annotation then a compile error is thrown.  Some form of
> parametrisation is also needed, which is where the (implementation)
> complexity arises when I think about it.

The by-ref operator is a limited form of the address (&) operator. There
is actually no problem as long as the reference does not escape its
definition. The by-ref model is actually a degenerate form of region
typing, since we do not allow escape at all (rather than allowing it as
long as the target region is guaranteed to be in a later activation).

Swaroop.
_______________________________________________
bitc-dev mailing list
bitc-dev@coyotos.org
http://www.coyotos.org/mailman/listinfo/bitc-dev

Reply via email to