^^ limitation

James Miller james at aatch.net
Thu Apr 26 18:55:16 PDT 2012


On Friday, 27 April 2012 at 00:56:13 UTC, Tryo[17] wrote:
>
> D provides an auto type facility that determins which the type
> that can best accommodate a particular value. What prevents
> the from determining that the only type that can accommodate
> that value is a BigInt? The same way it decides between int,
> long, ulong, etc.
Because the compiler doesn't know how to make a BigInt, BigInt is 
part of the library, not the language.
>
> Why couldn't to!string be overloaded to take a BigInt?
It is, its the same overload that takes other objects.
>
> The point is this, currently 2^^31 will produce a negative long
> value on my system. Not that the value is wrong, the variable
> simply cannot support the magnitude of the result for this
> calculation so it wraps around and produces a negative value.
> However, 2^^n for n>=32 produces a value of 0. Why not
> produce the value and let the user choose what to put it into?
> Why not make the he language BigInt aware? What is the
> negative effect of taking BigInt out of the library and make it
> an official part of the language?

Because this is a native language. The idea is to be close to the 
hardware, and that means fixed-sized integers, fixed-sized floats 
and having to live with that. Making BigInt part of the language 
opens up the door for a whole host of other things to become 
"part of the language". While we're at it, why don't we make 
matrices part of the language, and regexes, and we might aswell 
move all that datetime stuff into the language too. Oh and I 
would love to see all the signals stuff in there too.

The reason we don't put everything in the language is because the 
more you put into the language, the harder it is to move. There 
are more than enough bugs in D right now, and adding more 
features into the language means a higher burden for core 
development. There is a trend of trying to move away from tight 
integration into the compiler, and by extension the language. 
Associative arrays are being worked on to make most of the work 
be done in object.d, with the end result being the compiler only 
has to convert T[U] into AA(T, U) and do a similar conversion for 
aa literals. This means that there is no extra fancy work for the 
compiler to do to support AA's

Also, D is designed for efficiency, if I don't want a BigInt, and 
all of the extra memory that comes with, then I would rather have 
an error. I don't want what /should/ be a fast system to slow 
down because I accidentally type 1 << 33 instead of 1 << 23, I 
want an error of some sort.

The real solution here isn't to just blindly allow arbitrary 
features to be "in the language" as it were, but to make it 
easier to integrate library solutions so they feel like part of 
the language.

--
James Miller


More information about the Digitalmars-d mailing list