POS, OOFS, CL v Scheme, etc.
Kalman Reti
reti@RIVERSIDE.SCRC.Symbolics.COM
Wed, 14 May 1997 10:50 -0400
Date: Tue, 13 May 1997 13:22 EDT
From: David Gadbois <gadbois@cyc.com>
From: hbaker@netcom.com (Henry G. Baker)
Date: Tue, 13 May 1997 07:41:37 -0700 (PDT)
For example, the LispM used 'stack groups' for its threads, and
these turned out to be pretty 'heavy weight', due to the
requirement to bind and rebind a bunch of shallow-bound 'special'
variables. I'm not sure that this is such a hot idea in 1997.
Therefore, since CL was based substantially on the LispM model, I'm
not so sure that CL itself can survive without change into 1997
LispOS.
I was always amazed that they implemented dynamic binding that way.
But that is a low-level implementation decision you could alter
without effecting much else.
In fact there was a never-completely debugged internal switch to deep binding
for the 36xx era machines, so it could definitely be changed relatively
easily.
Things have changed: Memory writes are
more expensive, coding style uses much less dynamic binding, and
threads are used much more widely. I'd be willing to bet a beer that
a deep-binding approach will win. Dereferencing dynamic bindings
would be much more expensive, but stack-group switching would be
considerably cheaper: Just save the old registers and restore the new
ones.
Lisp machines frequently ran at ratios of virtual to physical memory of 40x
or more (I recently booted an 8.0 megaword XL1200 with 1.9 gigawords of
virtual memory) so we had to consider the effect of potential page faults
on the dereferencing, which, at the time, empirical studies showed happened
quite a bit more frequently than context switches. Hence our choice.
--David Gadbois