Sat May 9 09:51:51 CEST 2009
So what does the lazy language look like from the point of the
programmer? First, it does not distinguish between instantiation and
macro definition. That is what the specializer handles.
Ok.. so there's and rpn language lazy: now, which has a completely
separate namespace (lazy) and defines in terms of (macro).
I.e. (pic18-begin ,(lazy: 123 123 +) force)
The next thing to figure out is 'dup. If a quoted macro ends up being
forced more than once, we (probably) want to memoize it into a word.
Since it's not possible in general to replace a forced macro with a
word later, this needs some form of backtracking.
Something like: default behaviour = instantiate. Whenever this turns
out to be problematic (recursion or instantiation of large macros)
turn the macro into a run-time abstraction.