<div dir="ltr"><div><div><div>The compiler detects literal constants. A function such as<br><br></div>f() -> ["I", "am", "a", "literal", "constant", "valiue"].<br><br></div>will return a constant list. These lists go into a "constant heap" which means that other heaps can just reference those values directly from there. Prior to Erlang version 20.0, if you sent such a constant (locally) from one process to another, the send would copy the constant literal into the mailbox of the receiving process. Not anymore. The value is referenced from the constant heap. There is a subtlety when you load new code in which the old constants are correctly retained by the VM, but otherwise, things works seamlessly for programmers.<br><br></div>Your example is somewhat degenerate because the empty list and empty map already has special representation in the VM. One way to detect if a value is a constant is to look at the output from the compiler. The module will have a special section for constant literals, and you can verify that the compiler indeed did detect a value as being a constant. In general, constants are congruences in the sense that compounding structures are constants if all their children are in the term tree.<br><br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Oct 26, 2017 at 1:18 PM Benoit Chesneau <<a href="mailto:bchesneau@gmail.com">bchesneau@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space">With Erlang 20, "<span style="color:rgb(51,51,51);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px">Erlang literals are no longer copied when sending messages" according to the changelog. </span><div><span style="color:rgb(51,51,51);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px">Does it means something like #{ somelist => [], map => #{ } } will be returned from a gen_server call without beeing copied?  (ie the content of somelist and somemap will only be referenced ? </span></div><div><font color="#333333" face="Helvetica Neue, Helvetica, Arial, sans-serif"><span style="font-size:14px"><br></span></font></div><div><font color="#333333" face="Helvetica Neue, Helvetica, Arial, sans-serif"><span style="font-size:14px">Benoit<br></span></font><div><br></div></div></div>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div>