Passerine: A small extensible language designed for concise expression
Some questions about the FAQ&#x27;s &quot;What is vaporization memory management?&quot; section:<p>&gt; All functions params are passed by value via a copy-on-write reference.<p>What&#x27;s a &quot;copy-on-write reference&quot;? Does this mean that if write a function that takes a million-element list, and inside the function I mutate the last element, the entire list will be copied (inside the function, but invisibly to the outside)? If yes, can I write a function that mutates a list in place so that the caller can see the effect? <i>Can</i> I even mutate lists or anything else? I don&#x27;t see any clear information about whether Passerine has mutable data at all.<p>&gt; A form of SSA is performed, where the last usage of any value is not a copy of that value.<p>Does this mean that any non-last usage <i>is</i> a copy? Or is it &quot;only&quot; a copy-on-write? Can you always tell statically where a usage is a last usage?<p>&gt; All closure references are immutable copies of a value. These copies may be reference-counted in an acyclical manner.<p>Again, are these eager copies or lazy copy-on-writes? How are non-closure references garbage collected?<p>I would be interested in a much more detailed write-up of this memory management technique.