[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: issue DYNAMIC-EXTENT-FUNCTION, version 1
- To: David A. Moon <Moon@STONY-BROOK.SCRC.Symbolics.COM>
- Subject: Re: issue DYNAMIC-EXTENT-FUNCTION, version 1
- From: sandra%defun@cs.utah.edu (Sandra J Loosemore)
- Date: Fri, 26 May 89 11:02:48 MDT
- Cc: Sandra J Loosemore <sandra%defun@cs.utah.edu>, cl-cleanup@sail.stanford.edu
- In-reply-to: David A. Moon <Moon@STONY-BROOK.SCRC.Symbolics.COM>, Fri, 26 May 89 12:22 EDT
> Date: Fri, 26 May 89 12:22 EDT
> From: David A. Moon <Moon@STONY-BROOK.SCRC.Symbolics.COM>
>
> That
> shows something interesting about the Symbolics sys:downward-function
> declaration: the scope that defines the dynamic extent is larger than
> the lambda-expression containing the declaration.
That's the main reason why I'm not really enthusiastic about this
approach -- the scoping rules just don't fit in with the rules for
other declarations.
> I guess you're going to require that
> (funcall <foo> (lambda (...) (declare (sys:downward-function)) ...))
> be restructured as
> (flet ((dummy (...) ...))
> (declare (dynamic-extent #'dummy))
> (funcall <foo> #'dummy))
Yes, this is what I had in mind. Sorry if that wasn't clear in my
original message. I agree that the syntax is rather cumbersome.
> After all, in this example
> (let ((a <foo>))
> (declare (dynamic-extent a))
> (<bar> #'(lambda (z) (if (<baz> z) (<frob> a) (<borf> z)))))
> the dynamic extent declaration for A might mean that by the time the
> scope of the declaration is exited, something will happen that will
> make <baz> return false from then on, so A will no longer be referenced,
> even though the closure that was given as an argument to <bar> will
> continue to be called.
I guess we differ over what "referenced" means. My interpretation is
that the closure references A regardless of whether or not the piece
of code which references A inside the closure is actually executed on
any particular invocation, and that it's therefore an error to say
that A has dynamic extent unless the closure also has dynamic extent.
Maybe the real problem is that the DYNAMIC-EXTENT proposal didn't
formally define what "inaccessible" means. I'm relying on an
intuitive idea of what parts of a closure a garbage collector would
have to scan.
-Sandra
-------