29-Oct-2013 16:22, Don пишет:
On Tuesday, 29 October 2013 at 11:26:45 UTC, Froglegs wrote:

   BigInt n = 100;
   n += 10;
   ++n;

... and both the 2nd and 3rd lines will result in a reallocation even
though there is no need for it, because only n is referencing the
memory it wraps.


 Does BigInt not have overloaded operators for adding normal integers?
Is it converting 10 to a BigInt prior to adding it to n?

Yes, it has overloaded operators, but that's not relevant. The issue is
that
initially n points to an block of memory, containing [100].

Then, if you use COW, n+= 10 isn't in-place. It has to create a new
array, containing [110].
Then ++n creates a third array. [111].


Can't it use ref-counted COW? Then since there is only 1 reference to the original block it may mutate it in-place else it creates new chunk with refs=1 and decrements the original count. Maybe I'm missing something but it shouldn't be that hard.

--
Dmitry Olshansky

Reply via email to