[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: define
If we are casting votes on DEFINE, I would observe that of the
half-dozen or so of us here who are directly involved in our Scheme
effort, only one of us favors any legitimate status for "global"
DEFINEs. (He happens to come from Indiana, BTW, and we may have
succeeded in changing even his mind on this issue.) The rest of us
have from the outset found Scheme-84's global DEFINE semantics to be
an abhorrent violation of the principles of lexical scope. In fact,
we assumed it was a compiler bug when we first ran across it.
Even where there is a most global environment, we are hard-pressed
to see what could justify advocacy of a special form that reaches
into it specially from an enclosed scope to destructively manipulate
its state. If we (collectively) need an extension of Scheme to achieve
this effect, let's promote binding environments to first-class objects and
define a destructor that treats them uniformly. (I believe, however,
that it is possible to write substantive, efficient, and above all,
elegant Scheme programs without the inclusion of such a destructor.)
I have always felt that the global DEFINE in Scheme-84 was a profound
design flaw that must be attributable to the unfortunate influence of
the Franz environment (both software and intellectual) in which Scheme-84
was constructed. I understand that there is a substantial difference of
opinion on this issue, but we find it difficult to see how global DEFINEs
are even arguably compatible with what we take to be fundamental design
principles of Scheme. In fact, as evidence of our objection to Scheme-84's
global DEFINE semantics, we have done some work on ripping this feature out
of a copy of the Scheme-84 compiler, replacing it with S&ICP's internal
DEFINE.
asc
p.s. My apologies for blitzing you with such a strong opinion; we hashed
this one out locally until it was beaten to death some time ago,
and our opinions have admittedly become somewhat calcified....