process WORM dictionary

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


Hi!

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) ->
    put('$ancestors',[Parent|Ancestors]),
    put('$initial_call',{M,F,A}),
    Result = (catch apply(M,F,A)),
    exit_p(Result,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.

/Uffe
-- 
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