Sun Feb 18 15:32:47 GMT 2007
passing state to quotations
now for code quotations. how to recurse?
the problem is that if quotations are executed using 'run', they will
not obtain the state, so they need to somehow be wrapped such that
running them passes alog the state. is that at all possible?
yes. using some kind of continuation passing..
instead of wrapping the code simply in 'dip'
- quoted programs need to be parsed recursively
- they need to be modified such that running them results in the
object being loaded on the stack.
- it is not possible to override every word that performs 'run' to
incorporate this behaviour.
- this trick is only LEXICAL no dynamic binding of words, only dynamic
passing of state.
same old same old..
this goes way back :)
the problem is of course in the shielding. as long as every primitive
is really shielded from the state, there is absolutely no way to
access it. so (blabla) dip is not a good apprach.
it should be hidden but accessible, and not shielded.
let's do this manually for now: when you want to use quoted code in a
method definition, you have to explicitly parse, compile and invoke
it. the default will be globally bound code only, and shielded
execution for simplicity.
the alternative is to compile quoted code as a method (recursive
parse-state). this is kind of strange since the invokation has to
happen manually. no 'ifte' for example.
so unless i find a way to solve the 'ifte' problem and other
implicit 'run' calls, there is no way to do this automaticly: this is
really a modification to the core of the interpreter.
so i am going to let go of the scary bits, and conclude:
* only flat composition done automaticly
* recursive composition possible using 'invoke'
* quoting method code is done manually using special parser/compiler
so it all remains pretty much a state monad. some special functions
can be thrown into the composition to act on the state through some
interface, while the rest is 'lifted' automaticly.