Side thought: if this concept goes through, ^META is distinguished as "set undecayed, fetch undecayed"... not distinguished as "set lifted, fetch unlifted".
Is META still a good name for that? It's certainly not as good as it was... but probably still okay, as it's what you use for "strong preservation".
So if you write:
some-function-call ..<some-expression>..
Changing it to this won't work in a general sense:
var: ..<some-expression>..
some-function-call var
But this should be a preserving transformation (modulo ERROR!)
^var: ..<some-expression>..
some-function-call ^var
If you don't want to PANIC on an ERROR! and SOME-FUNCTION-CALL may handle ERROR!, then:
try ^var: ..<some-expression>..
some-function-call ^var
(I am weighing bringing back ~^var~: some-expression
or some such decoration as necessary to approve ERROR! overwrites, to avoid the situation of overwriting variables only to panic immediately afterward with the variable now "corrupt" potentially in your view... which would mean that plain ^var: some-expression
would pipe the error through and not do an assignment by default. But I don't know if I'm convinced that's better than an operator that proactively promotes ERROR! to PANIC passing through everything else, such as ^var: must some-expression
, if you actually care about avoiding metavariable corruption with errors)
Anyway... is "don't decay" still "META"? The word can mean whatever one wants I guess, given that LIFT and UNLIFT have gone off on their own branch of meaning. Nothing better comes to mind offhand.