<div dir="ltr"><div>> <span style="font-size:12.8px">If a process dictionary<br>
> D contains an association K -> V, then V is not mutable,<br>
> K is not mutable, the association K->V is not a data object<br>
> visible to the process<br></span></div><span style="font-size:12.8px"><br>The same rules could be applied to a doubly linked list or a 'queue' that internally implemented as a doubly linked list.<br></span><div><span style="font-size:12.8px"></span><br><span style="font-size:12.8px">> and D is not a data object visible to the process<br>> ETS tables are not data structures in an Erlang process.</span><br><div class="gmail_extra"><br>Anyway, they are mutable(right?) and I didn't ask that a new data structure must necessarily reside in an Erlang process.<br><br>> Another way to model process dictionaries would be to model a dictionary as a sibling process<br></div><div class="gmail_extra">Doubly linked lists are also could be modeled as a chain of processes. Looks like anything could be modeled in a terms of communicating processes(actors), but it will not be efficient otherwise the erlang's linked lists, maps, ets tables, tuples would have been made like that.<br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On 11 July 2016 at 08:31,  <span dir="ltr"><<a href="mailto:ok@cs.otago.ac.nz" target="_blank">ok@cs.otago.ac.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span>>> everything else by design is immutable<br>
><br>
> Tell this to ets tables and process dicts.)<br>
><br>
<br>
</span>ETS tables are not data structures in an Erlang process.<br>
They are outside all processes and act in some ways.<br>
<br>
Each process has its own dictionary, and if you search<br>
the archives, you will discover that process dictionaries<br>
can in principle be eliminated by a source to source<br>
transform that simply passes the current value around as<br>
an extra parameter.  The key point is that a process's<br>
dictionary in and of itself is *not* represented as a<br>
data structure inside the process.  If a process dictionary<br>
D contains an association K -> V, then V is not mutable,<br>
K is not mutable, the association K->V is not a data object<br>
visible to the process, and D is not a data object visible<br>
to the process.<br>
<br>
Another way to model process dictionaries would be to model<br>
a dictionary as a sibling process, with operations on the<br>
dictionary done by RPC calls.<br>
<br>
</blockquote></div><br></div></div></div>