[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
common lisp- &environment objects
Date: Mon, 10 Jun 85 14:59 EDT
From: David C. Plummer in disguise <DCP@SCRC-QUABBIN.ARPA>
Date: Mon, 10 Jun 1985 09:47 EDT
From: "Scott E. Fahlman" <Fahlman@CMU-CS-C.ARPA>
So again the question is whether we can accomplish everything we need to
with environment objects even%if these objects have only dynamic extent.
Whether some parts of the environment need to have indefinite extent in
order to make closures work is a different question, I think.
OK, I think I understand the question you are asking. My question is:
Does it matter? I cannot think of any valid programs (read: macros)
that would want to store an environment in permanent storage. For that
matter, I cannot think of any valid programs (read: macros) that side
effect the environment. They only USE them, which means you pass them
as arguments to macroexpand(-1). Therefore, I don't think it matters
how they are implemented, since all programs should be using them as
lexical scope, dynamic extent, which is the most restrictive. The only
"program" that needs to update the environment is the interpreter (read:
special forms), and that "program" is supplied by the vendor and users
don't need to know about it.
I think Scott has hit the nail on the head and I also agree with Dave's comments.
To sum up: the data structure that Common Lisp offers to users is the lexical
closure, not the environment. The only thing a user can do with an environment
is receive it as an argument and pass it to another function as an argument.
I believe that these environments should be defined to have only dynamic extent;
in other words, a user isn't allowed to save them away in permanent structures.