process WORM dictionary

Ulf Wiger <>
Thu Feb 22 15:57:03 CET 2001


Here's a thought.

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,
from proc_lib.erl:

init_p(Parent,Ancestors,M,F,A) ->
    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

More information about the erlang-questions mailing list