David Gileadi:

    writefln("%s", b.length - a.length);  // Yup, 2
writefln("%s", a.length - b.length); // WAT? 18446744073709551614

Nowadays a better way to write such kind of code is using the Phobos "signed" function:

writefln("%s", b.length.signed - a.length.signed);
writefln("%s", a.length.signed - b.length.signed);


This is why I agree with Don that:

> Having arr.length return an unsigned type, is a dreadful
language mistake.

This mistake is by design. Walter has resisted several times turning them into signed values, and even making size_t a type strongly different from uint/ulong. I don't agree with this design decision, but it's unlikely that Walter has changed his mind on it. So better to go on and discuss other things more likely to happen.

Bye,
bearophile

Reply via email to