Announcing E 0.8.4: The Birthday Release

Mark S. Miller markm@caplet.com
Thu, 24 Jun 1999 12:15:48 -0700


At 05:00 PM 6/1/99 , Dan Bornstein wrote:
>[+] Understood and agreed, sort of. One of the MIT extensions of Scheme is
>named-lambda, which is just like (unnamed) lambda except that you provide
>a name in addition to everything else, which is used when printing out
>the result of evaluating the expression, intended for debugging, but clearly
>useful in the world of persistence. I intend to add named-lambda to my
>Scheme, but I don't intend to add a new special define primitive. Here's
>what I'll be doing (mo/less):
>
>  (define (name arg1 ... argn) body)
>  =>
>  (primitive-define name (named-lambda (name arg1 ... argn) body))
>
>Yes, the name gets duplicated in the translation, but it makes it manifestly
>clear that the name of the variable that the object is bound to has nothing
>necessarily to do with the internal name for the object, 

[-] Formal minimality is somewhat different than expansion for explanation

By using one name-defining primitive to define a name in two namespaces 
(variable & behavior), I am in fact conflating two issues.  However, I 
intend the expansion-to-kernel to be clarifying for programmers, in a certain 
range of the learning process, to be able to look at their expanded program 
to better figure out what's going on.  Too much expansion that requires 
explanation of too many new concepts can be more distracting than clarifying.

In this case, I can genuinely argue it, even believe it, both ways.  But 
sometimes one just has to make a judgement without any justification.  My 
call is to leave this one alone.