In thinking about whether or not there's something intrinsically necessary about a per-block (or per-group) differentiation of word-binding, I thought of a case where I'd used this.
In SPECIALIZE, it only binds the SET-WORD!s to the frame you are specializing. Regular words (and anything else, refinements, etc.) are left bound as they were:
>> value: [d e]
>> apde: specialize :append [
value: value ; SET-WORD! is bound to specialization's frame
]
>> apde [a b c]
== [a b c [d e]]
This saves you from the COMPOSE step you'd need otherwise, which is what you have to do with objects:
>> value: [d e]
>> obj: make object! [value: value]
** Script Error: value is ~ isotope
>> obj: make object! compose [value: (value)]
== make object! [
value: [d e]
]
I'm not sure it's a critical feature to preserve. If it turned out some alternative conception of binding wouldn't permit the inconsistency... and that conception offered some great advantage... I'd be willing to lose it. There are legitimate arguments against doing such trickery behind people's backs, maybe the COMPOSE helps you keep it straight:
>> value: [d e]
>> ap5: specialize :append [
value: 5
assert [value = 5] ; assertion failure, but I just set it!
]
But I wanted to catalog it as a case of "arbitrary binding logic" that's in place at present.