Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
August 10, 2017 [Issue 17736] bigint opunary should be better performing | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=17736 hsteoh@quickfur.ath.cx changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hsteoh@quickfur.ath.cx --- Comment #1 from hsteoh@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. -- |
August 10, 2017 [Issue 17736] bigint opunary should be better performing | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=17736 Steven Schveighoffer <schveiguy@yahoo.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #2 from Steven Schveighoffer <schveiguy@yahoo.com> --- 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. -- |
August 10, 2017 [Issue 17736] bigint opunary should be better performing | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=17736 --- Comment #3 from hsteoh@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. -- |
August 10, 2017 [Issue 17736] bigint opunary should be better performing | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=17736 --- Comment #4 from Steven Schveighoffer <schveiguy@yahoo.com> --- Either way, this is not a "simple" enhancement. But feel free to take over this enhancement request if you want to write it up. -- |
August 11, 2017 [Issue 17736] bigint opunary should be better performing | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=17736 --- Comment #5 from hsteoh@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. :-) -- |
August 11, 2017 [Issue 17736] bigint opunary should be better performing | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=17736 hsteoh@quickfur.ath.cx changed: What |Removed |Added ---------------------------------------------------------------------------- See Also| |https://issues.dlang.org/sh | |ow_bug.cgi?id=17746 -- |
Copyright © 1999-2021 by the D Language Foundation