@rgchris suggested WITH for virtual binding, as in do with context [...].
I said that the historical IN operator--which is used to bind words to contexts, wouldn't have any alternate purpose for blocks. So it was economical to consider it the virtual binding operator.
But that took for granted that IN was a good name to take for an operator. Is it, really? Or are people likely going to want to have local variables called in and out so often that this would be inconvenient? (You can say lib/in but would you want to?)
We've switched INPUT as a verb to ASK TEXT! and I think that's much better, so pushing IN out of the way seems like it might be good as well.
This occurred to me while noticing that virtual binding chains can do something regular binding can't do, which is be removed. You can peel off layers of virtual binding to get a view of the thing before. Naming that out seemed bad, which drew my attention that we've taken for granted that in is an annoying word to be taking for such a common use. And without seemed kind of like a good "virtual unbinding" operator.
But when you compare if in obj word [...] against if with obj word [...], the WITH doesn't make a lot of sense for searching to see if the key is present.
But could FIND be used for that? It's not totally clear what FIND on an object would do, but Rebol2 made it search the keys, not the vars:
rebol2>> find make object! [x: 10] 'x
== true
rebol2>> find make object! [x: 10] 10
** Script Error: Invalid argument: 10
That FIND could work on ANY-WORD!, and return the bound word in the case of objects instead of true
. I'm not sure if it would be any more weird than returning a LOGIC! instead of a position...arguably more consistent (the key is the "position" in an object, because it can be used as a cache for re-retrieving what you found).
So that would give you if find obj word [...], and then you could use any of find obj word or with obj word or bind obj word to get the bound word.
(If we want to stress BIND is mutating, then maybe it shouldn't take WORD!s as arguments...but PATH!s with nested GROUP!s/BLOCK!s throw a bit of a wrench into everything.)
Anyway, just challenging if the word IN is a bad thing to take as a native.