[erlang-questions] data sharing is outside the semantics of Erlang, but it sure is useful

Richard O'Keefe ok@REDACTED
Thu Sep 17 08:00:34 CEST 2009

On Sep 17, 2009, at 2:46 PM, Witold Baryluk wrote:
> It is quite strange to anybody, that for example time complexity
> (and memory also as sharing is lost) of algorithm are different in
> situations:
> 1) we built data structure D, and execute algorithm a(D)
> 2) we build data structure D, send it to P, which then executes a(D).

My message explicitly said that I thought that Erlang should
*PRESERVE* sharing, including in message passing.  You didn't
need to persuade me of something I already argued for.

The point at issue, as I understood it, was an "OPTIMIZATION",
namely INTRODUCING sharing.  For example, if memory serves me
correctly, whenever the Logix implementation of Flat Concurrent
Prolog successfully executed a test X == Y, it smashed one of
them to refer to the other.  That's run-time introduction of
sharing.  The reason why Logix did that was that they didn't
_have_ atoms, only strings, in order to avoid having to lock
a centralised symbol table.  But they wanted strings to _act_
rather like atoms.

I recommend
				within a     during message
				process      passing
	preserve sharing        YES[1]       YES[2]
	introduce sharing       NO           NO

[1] This is what Erlang does now.
[2] This is a change, and it's going to be tricky to do it
     without slowing "normal" cases down.
     And I'm counting term_to_binary/binary_to_term here,
     because of their use when messages are passed over a wire.

More information about the erlang-questions mailing list