Ah-ha… I’d completely missed this use of void, as a return value.
Though this does now raise the question of whether a function should return VOID (antiform COMMA!) or HEAVY VOID (empty antiform PACK!) Both seem to vaporise in lists, after all.
I guess it depends on whether you want the function call to be ignored or not.
But I kind of went tangential into "when should you return void-or-heavy-void, vs. another value (e.g. TRASH!). What you actually asked is "if my intention is to return a ghostly 'no value' state, how do I pick between antiform comma and empty antiform pack". So let me take another crack at that specific and important issue.
Note that the names shuffled a bit... again... (please, please let it be the last time ). But it's still the same two states. I just decided that VOID? made more sense as the "superclass" in the isotopic model, vs. trying to assign the name "void" to either state.
So this is pretty much required reading for understanding the answer:
It's really only vanishable functions that should guide their decision from whether they want to vaporize or not. Empty antiform PACK! gives you the power to return something that opts out, that doesn't vanish. Use the right one as appropriate.
But if your function is not marked "vanishable" (as most won't be) then you no longer have to worry about your function vanishing. The default choice to reach for if you are generating an "opt out" signal in a non-vanishable function is probably VOID! (the antiform COMMA!).
This is kind of the new "canon state of unsetness"... it's what you get when you assign either an empty PACK! or a COMMA! antiform to a non-^META target:
So the system is trying to push everything to "light voids"... when it can. Using empty packs is a necessary evil when you need an unstable antiform that doesn't vanish.
Notice also that antiform COMMA! is syntactically easy to generate, as return ().
Generating an empty pack is never going to be quite as light:
return ~[]~
return pack []
return heavy ()
I think this fast intrinsic function means there's no need for a "named" way of making heavy voids that's any better than that.
If you're not originating the value and just piping a value from elsewhere through, your only concern would be if you were a vanishable function and have to interject yourself into the safety concerns of surprise vanishing.