I'm converting @szeng's old c2r3 to Ren-C, and came across a use of a refinement I forgot existed, the "NO-SET" refinement of R3-Alpha:
cbdata: make callback-data reduce/no-set [
model: model
path: gtk/tree_model_get_path model iter
]
What does it do, you ask?
r3-alpha>> help reduce
USAGE:
REDUCE value /no-set /only words /into out
DESCRIPTION:
Evaluates expressions and returns multiple results.
REDUCE is a native value.
ARGUMENTS:
value
REFINEMENTS:
/no-set -- Keep set-words as-is. Do not set them.
/only -- Only evaluate words and paths, not functions
words -- Optional words that are not evaluated (keywords) (block! none!)
/into -- Output results into a block with no intermediate storage
out (any-block!)
So basically, it just doesn't evaluate the SET-WORD!s in the block.
With generalized quoting, you don't need it:
cbdata: make callback-data reduce [
'model: model
'path: gtk/tree_model_get_path model iter
]
Which approach seems more sane?
(If it's not obvious why it's doing a REDUCE instead of letting the MAKE OBJECT! do the evaluations, it's because it wants to set a field called MODEL as well as use a variable called MODEL, and MAKE OBJECT! currently doesn't distinctly bind the SET-WORD! to not be in the object, though it probably should consider SET-WORD! to be in the object and plain WORD! to use the binding outside the object...)
Will Red Ever Realize How Wrong They Are?
They've dug in on the stance that being able to quote anything to any level adds unnecessary complexity, calling them "esoteric lexical forms":
QUOTED! arrives (formerly known as "lit bit") - #2 by hostilefork
But instead of solving the problem once and for all--in a uniform and systemic fashion--they live in a world where you have to invent things like /NO-SET.
(And generic quoting of things that "don't need to be quoted" like BLOCK! underpins an actual working binding model, by letting you express the difference between binding capture and untouched binding...)