[erlang-questions] Process Dictionary limitations??

Dmitry Belyaev <>
Thu Oct 11 15:48:34 CEST 2012

Isn't this feature, I mean process dictionaries, much worse for functional nature of Erlang than parameterized modules?

Why aren't there any words about removing pdics but there are about functional pmods?

Dmitry Belyaev

On 11.10.2012, at 8:31, Richard O'Keefe wrote:

> You can think of the process dictionary this way:
> 	If there is a function clause
> 		f(X, Y, Z) -> A = g(X, Y), B = h(Z, A), q(A, B)
> 	replace it by
> 		f(X, Y, Z, D0) ->
> 		    {A, D1} = g(X, Y, D0),
> 		    {B, D2} = h(Z, A, D1),
> 		    q(A, B, D2)
> 	and replace
> 		    get(K)
> 	by
> 		    {get(K, D), D}
> 	and
> 		    put(K, V)
> 	by
> 		    {V, put(K, V, D)}
> I've omitted exception handling, but it's not actually
> all that different.  Tedious rather than difficult.
> So there's an important sense in which it doesn't spoil the
> functional purity of the language.  (I got this idea from a
> Xerox blue-and-white CS technical report giving a functional
> semantics for Euclid.)  There are bad things that can happen
> in imperative languages that still can't happen in Erlang.
> One big bad thing *can* happen.  If you call a function you
> haven't read, you do not know what it is going to do to the
> process dictionary.  It could change the value associated
> with any key; it could delete any key; it could add any
> key->value mapping.  Even specifications don't help,
> because although there have been several type systems that
> include effects, the type system Erlang now uses is not one
> of them.
> _______________________________________________
> erlang-questions mailing list
> http://erlang.org/mailman/listinfo/erlang-questions

More information about the erlang-questions mailing list