[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: No, I'm not joking

    DATE: Sat, 22 Dec 1984  10:37 EST
    From: Rob MacLachlan <RAM@CMU-CS-C.ARPA>	;

        WHAT do you want to use FLET* for that LABELS won't do?  There
    obviously is a difference, but I can't think of a place where the
    difference is useful.

We've had some internal discussion on this, here.  Inconclusive, but 
I feel less strongly, as a result.  Let me try to summarize some of the
discussion, and some of my feelings.

LABELS implies full recursivity and mutual recursivity.  This may
be harder than simply-nested single FLET's for some implementations,
vis-a-vis allocation of closures, sharing of stack frames, etc.
Some implementations might say, for LABELS, "Oh this the hard case",
and do something less efficient than either full analysis or
nested FLET's would allows.

There is also a conceptual issue, that when I see LABELS, *I* say
"Ohh, something trickily recursive or mutually-recursive is
going to happen here!"  This may be sheer prejudice, and completely
unreasonable.  This may be the heart of the issue.

Then there is the parallel to LET "issue", which is admittedly
not an issue, because there is no effect of "executing" the
function definition.  

"So you can always use nested FLET's, if you think that's
clearer."  But that plays havoc with the indentation
(that *IS* an issue).  Then there was this comic dialogue
between Moon and myself, "Oh, so who needs LET*, you can
use nested LET's".  "But you can't, because LET* allows
declarations".  So same for FLET*, except there's nothing
you could possibly want to declare, out of the current
set of CL declarations.   But FLET doesn't allow body
declarations, anyway!  Well, on one page the CLM says
it does, and on another it doesn't,  (we implement
"no, it doesn't")....