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

Re: addendum



    From:    Steven Salzberg <Salzberg>
    
    Since we have to use this LSET philosophy, do we have to 
    (LSET (RECKLESSNESS) 'HIGH) or just SET it?  How about 
    *load-noisily?* then?  Really, if we're eliminating global 
    variables, let's be consistent.  But if we're not, then it's
    not fair to make it so painful to use globals for those of us
    who (gasp!) LIKE them.
    
LSET is only for declaring variables, not for doing arbitrary
side-effects like (SET (...) ...) does.

(RECKLESSNESS) is a true wart.  In future versions it will be lexically
scoped, I hope.  Fortunately it does not affect the semantics of the
language and is not very important in writing programs.

*LOAD-NOISILY?* is now (LOAD-NOISILY?), I think, and is also a wart,
but again it doesn't have much to do with semantics, so I don't consider
it to be a grave problem.  Like (REPL-ENV), it's part of what is often
called process state.

You are confusing two unrelated issues.  Global state and global
variables are not synonymous.  The variables you declare with LSET
are not globally scoped; they are only apparent in the scratch
environment.  With version 2.7, T now has no truly global variables.
Programs running in a disjoint lexical environment are not affected
by the things you do to the scratch environment.  They WOULD be affected
if you clobberred a global read table.

The goal is not the elimination of global state, which is impossible,
but the control of global state, which is both very difficult and
very beneficial.