Stéphane Payrard cognominal-at-gmail.com |Perl 6| wrote:
I don't understand how = differs with that semantic from :=
I would expect that = would make a copy (clone?) of the object.
For a mutable object, I don't know if that copy should be immediate or deffered
by a mechanism of copy on write. Probably that behavior could depend on a
trait of the class that implements to be copied object.
Not the best illustration, but the only one I have prepared so far:
<http://www.dlugosz.com/Perl6/web/assignment/assign-1.png>
This shows $x = $y;.
The use of := (binding) would affect the leftmost column.
my $z := $y;
would have $z's symbol table entry point to the same Item as $y, namely
#8CD9.
Assignment (=) does not clone or copy the object. In the illustration,
note that both Items refer to the same Dog (#A829) after assignment.
With reference assignment semantics, if you want a copy or clone, you
make one as an explicit step. Hence the existence of methods like
deepcopy in the base Object of languages with that feature.
The copy-on-write behavior you suggest is what Perl 5 does to make
operator overloading appear to have value semantics. But Perl 6 does
not describe this mechanism in any way. Instead, "value types" are
immutable so it doesn't matter that the object is not cloned.
--John