[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Issue: STACK-LET (Version 1)
Date: Mon, 27 Jun 88 15:40:27 EDT
From: Scott.Fahlman@B.GP.CS.CMU.EDU
Is there any reason, aside from compatibility with the current Symbolics
usage,
Moon has our vote, not me. I usually leave it to him to evaluate what is good
or bad for Symbolics as a company. The extent to which Symbolics usage plays into
this is neither more or less than the extent to which any company offering this
primitive plays into this.
why you prefer
(stack-let ((x (list a b c))) ...body ...)
to
(let ((x (list a b c)))
(declare (dynamic-value x))
... body )
Since the idea is to give advice to the compiler about a specific binding,
it seems to me that a declaration would be more consistent with the rest of
the language than a new special form. For example, that's how we handle
advice about type restrictions. Also, this would allow one to mix dynamic
and non-dynamic bindings in the same LET form.
-- Scott
No really big reason. A couple of little reasons.
* In implementations where a related facility (eg, Zetalisp's older
WITH-STACK-LIST and WITH-STACK-LIST* primitives) exists, it's easy to
write a macro to translate STACK-LET into the other stuff. Whether it's
easy to add a declaration depends on how declarations are implemented.
* Since some implementations provide STACK-LET and not the modified LET, I
thought I'd get stronger support from people who do provide it. People
always seem to be more likely to vote for things that involve the least
work on their own part.
* I was afraid that some people would see this as a hairing up of LET.
In retrospect, however, I guess you're right. It could be useful for
DO, PROG, etc. if you had the declaration. Note well, however, that it's
not useful for any case where the construction form is not lexically
apparent to the binding form. Eg,
(DEFUN F (X) (DECLARE (DYNAMIC-EXTENT X)) ...)
would violate modularity boundaries to optimize
(F (LIST 1 2 3))
although I suppose some argument could be made that in block compilation
it was ok. By putting it in a STACK-LET form, this issue is made to not
come up.
* I sometimes get more results by suggesting something overly conservative
and letting people suggest that it's not right or not enough than I do by
suggesting originally the thing in full blown form. The latter strategy
often gets me not taken seriously, whereas the first strategy offers a
foot in the door to people who readily grasp the concepts of the stripped
down proposal and who might after admitting the topic for discussion still
arrive at the same position as I'd have originally wanted to propose.
In fact, the modified LET is fine with me. My main criterion is to have
something which has the highest likelihood of a yes vote in X3J13.