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