'int' is enough for 'length' to migrate code from x86 to x64
David Gileadi via Digitalmars-d
digitalmars-d at puremagic.com
Wed Nov 19 08:02:49 PST 2014
On 11/19/14, 6:57 AM, ketmar via Digitalmars-d wrote:
> On Wed, 19 Nov 2014 13:47:50 +0000
> Don via Digitalmars-d <digitalmars-d at puremagic.com> wrote:
>> If I have two pencils of length 10 cm and 15 cm, then the first
>> one is -5 cm longer than the other.
> and again "length" is not a relation. show me pencil of length -10 cm.
> when you substractin lengthes, you got completely different type as a
> result, not "length" anymore. ah, that untyped real-life math! ;-)
To me the salient point is that this is not just a mess with real-life
math but also with math in D: lengths are unsigned but people subtract
them all the time. If they're (un)lucky this will return correct values
for a while, but then someday the lengths may be reversed and the values
will be hugely wrong:
int[] a = [1, 2, 3];
int[] b = [5, 4, 3, 2, 1];
writefln("%s", b.length - a.length); // Yup, 2
writefln("%s", a.length - b.length); // WAT? 18446744073709551614
This is why I agree with Don that:
> Having arr.length return an unsigned type, is a dreadful language
> mistake.
More information about the Digitalmars-d
mailing list