Alaric B. Williams
Fri, 16 May 1997 20:27:21 +0000
> >Note that recently bound dynamic variables are found very fast,
> >they are at the top of the stack.
> If I start talking about dynamic variables, I'll probably be talking
> nonsense, but here goes...
> Can't dynamic variables be implemented efficiently by storing the
> current value in the global place, and pushing the old global value on
> the stack. When the local binding of the variable goes out of scope
> you pop the old value off the stack and replace the global position
> with the original value. Thus lookups are always constant and fast.
There's a problem with parallel threads there...
> It's a bit the opposite of what most languages do, by making the
> global storage the local lookup, and pushing the old values on the
> stack, rather than the new ones.
Well, I'm toying with the idea of a reified stack as an extension to
continuations. Basically, if a function asks for it's continuation,
it receives a list of call frames, each containing the continuation
of that call, and some optional extra data.
Something like catch/throw would be written by making a call with a special
marker in the stack, which throw looks for and recontinues from there.
Something like dynamic binding would be written by putting alists in
the special markers, and having a (dyna-get '<symbol>) to read them
Many other interesting tricks are also doable with this mechanism...
Alaric B. Williams (firstname.lastname@example.org)
---<## OpenDOS FAQ ##>---
Plain HTML: http://www.delorie.com/opendos/faq/
Fancy HTML: http://www.deltasoft.com/faq0000.html