The much-berated process dictionary is very useful for certain
purposes, but in many cases, you'd want to use it in a way that you
put() an object into it once and then get() it many times.
The practice of using the process dictionary to continuously update a
set of "global variables" is rightfully discouraged (except this leads
people to create an ets table and use it for the same purpose, which
is no better -- actually worse in some ways.)
Here's an example of reasonable use of the process dictionary,
Result = (catch apply(M,F,A)),
What I'm thinking is that there is no reason why it would be even
possible for a process to replace these values, by e.g. calling
put('$ancestors', NewValue). This is a form of structural information
that shouldn't be considered part of the process' metadata.
So, wouldn't it be better if there was a write-once dictionary for
the process? I realize that there is an ambition to save bytes in the
process struct, but perhaps it could be implemented as a "sticky bit"
in the existing process dictionary?
Any attempt then to overwrite or erase a write-once object would
generate a runtime error.
Ulf Wiger tfn: +46 8 719 81 95
Senior System Architect mob: +46 70 519 81 95
Strategic Product & System Management ATM Multiservice Networks
Data Backbone & Optical Services Division Ericsson Telecom AB