[TODO: describe (only NRE-wiki page of relevance appears to be [L1 ]); rename the command to something more tclish?] Consequence of NRE.
Lars H: A thought: how is this different from what can be had through the age-old technique of creating a dummy local variable and putting an unset trace on it? Basic implementation:
proc atProcExit {script} { upvar 1 atProcExitScripts arr set arr($script) {} trace add variable arr($script) unset "$script\n\#" }
MS 2008-08-26 First please note that this is mostly exploiting the infrastructure of tailcall for a different and possibly interesting purpose, but is definitely the least thought-out of the new unsupported commands. It might not be more than a "tech show-off" for NRE.
Now to the actual question: some of the differences are:
Lars H: OK, so mostly cleanliness differences. Executing when the proc is gone (tailcallishly) could actually be considered a disadvantage, because it is easy to imagine at-exit scripts wanting to access final values of variables; that trace scripts are not guaranteed to provide access to any specific variable either was actually what I feared might be the main shortcoming of the above proc! Could the NRE atProcExit be modified to run code after the proc body but before its local context is destroyed?
AMG: What's the status of [atProcExit]?