On Saturday, September 03, 2011 17:03:33 Paul D. Anderson wrote:
> kenji hara Wrote:
> > 2011/8/31 Jonathan M Davis <jmdavisp...@gmx.com>:
> > > Unfortunately however, the proposal seems to have gone nowhere thus
> > > far. Until it does, pretty much every object is just going to use
> > > toString without parameters, and the problems with BigInt's
> > > toString remain. However, if the proposal actually gets
> > > implemented, then the issue should then be able to be sorted out.
> > > Objects would have writeTo and toString would presumably be
> > > deprecated.
> > 
> > I have posted pull request to fix BigInt's formatting with writef(ln)
> > <- formattedWrite().
> > https://github.com/D-Programming-Language/phobos/pull/230
> > 
> > Kenji Hara
> 
> There are problems with opCmp as well. The "<" and ">" operators won't
> compile if either argument is a const BigInt, so a lot of otherwise
> unnecessary copying is required.
> 
> You can see this in these functions I've had to add the following functions
> to my BigDecimal package:
> 
> private BigInt abs(const BigInt num) {
>     BigInt big = copy(num);
>     return big < BigInt(0) ? -big : big;
> }
> 
> private BigInt copy(const BigInt num) {
>     BigInt big = cast(BigInt)num;
>     return big;
> }
> 
> private int sgn(const BigInt num) {
>     BigInt zero = BigInt(0);
>     BigInt big = copy(num);
>     if (big < zero) return -1;
>     if (big < zero) return 1;
>     return 0;
> }
> 
> (I'd be happy to learn there's a better way to implement these.)

It's all part of http://d.puremagic.com/issues/show_bug.cgi?id=3659

The compiler is too strict on the signature of various struct functions (e.g. 
opEquals, opCmp, and toString), and const and immutable aren't dealt with very 
well.

- Jonathan M Davis

Reply via email to