Syntax for Subverting Virtual Binding

I'll point out that this is yet another defeat to the idea of using a BLOCK! the state for single-stepping.

let [x 'y]: whatever

If you single step, the LET will create a virtual binding for X and leave Y alone. Then LET itself vanishes. What remains is:

[x y]: whatever  ; with virtual binding on x

If the evaluator is limited to having to return the state in terms of a position in the original block, it wouldn't have the option of giving this back as the state for the next step... since there is no [x y]: there. Just [x 'y]:

My feeling is that the evidence is pretty strong on the side of saying evaluator state should be more flexible than a BLOCK!. We must keep looking at how to empower code that needs to single-step (I've described ASSERT and TLS EMIT) but accept that what comes back is a FRAME! and not the previous simplistic BLOCK! of a position that the historical DO/NEXT had.

1 Like