[Issue 17736] bigint opunary should be better performing

2017-08-11 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17736

hst...@quickfur.ath.cx changed:

   What|Removed |Added

   See Also||https://issues.dlang.org/sh
   ||ow_bug.cgi?id=17746

--


[Issue 17736] bigint opunary should be better performing

2017-08-11 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17736

--- Comment #5 from hst...@quickfur.ath.cx ---
Wrote it up here:

https://issues.dlang.org/show_bug.cgi?id=17746

Doesn't necessarily mean I have the time to actually implement this, though.
:-)

--


[Issue 17736] bigint opunary should be better performing

2017-08-10 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17736

--- Comment #4 from Steven Schveighoffer  ---
Either way, this is not a "simple" enhancement. But feel free to take over this
enhancement request if you want to write it up.

--


[Issue 17736] bigint opunary should be better performing

2017-08-10 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17736

--- Comment #3 from hst...@quickfur.ath.cx ---
IMO, the refcounting idea is still valid, if a bit more complicated to
implement. It would be important for reducing GC load on BigInt-heavy code, I
think.

--


[Issue 17736] bigint opunary should be better performing

2017-08-09 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17736

Steven Schveighoffer  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |INVALID

--- Comment #2 from Steven Schveighoffer  ---
Oh, so assignment just rebinds to the existing data? Then this request is
invalid.

One thing we could do is make a MutableBigInt, that is allowed to modify
itself. But that's a much bigger project.

--


[Issue 17736] bigint opunary should be better performing

2017-08-09 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=17736

hst...@quickfur.ath.cx changed:

   What|Removed |Added

 CC||hst...@quickfur.ath.cx

--- Comment #1 from hst...@quickfur.ath.cx ---
I notice also that binary operators on BigInt (even the opOpAssign ones like
+=) will create new instances of BigInt rather than update in-place.

One trouble with updating in-place is that it makes BigInt assignment either
expensive (always copy) or exhibit reference semantics:

---
BigInt x = 1;
BigInt y = x;
++y;
writeln(x); // will this print 1 or 2?
---

If I understand the BigInt design correctly, reference semantics are *not*
desirable because we want BigInt to be more-or-less a drop-in replacement of
fixed-size ints, and lots of code will break in subtle ways if the by-value
semantics was substituted with by-reference semantics.

One thought is that if BigInt uses some sort of reference-counting scheme, then
if the refcount is 1 we can update in-place, otherwise allocate a new BigInt to
hold the result as usual.

--