Thread overview
Range analysis result printing?
Jun 23, 2013
bearophile
Jun 23, 2013
Jonathan M Davis
Jun 23, 2013
bearophile
June 23, 2013
I am thinking about opening an enhancement request, but this time I first prefer to ask your opinion here.

For this code:

void main() {
    ubyte x;
    ubyte y = x << 1;
}


The range analysis determines that it's conceivable to the result of that expression to not fit in y, so the D compiler 2.064alpha gives:


temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) of type int to ubyte


To help the programmer understand faster the mistake in his/her code when expressions become more complex I think it's also useful to print the range resulting from the analysis, like:


temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) in interval [0 ... 510] of type int to ubyte


It uses 3 dots because it's an interval that includes the right end. Otherwise if you print an interval open on the right in a case like this you have to print a ulong.max+1 value:


void main() {
    ulong x;
    int y = x;
}


Do you like?

Bye,
bearophile
June 23, 2013
On Sunday, June 23, 2013 16:20:51 bearophile wrote:
> It uses 3 dots because it's an interval that includes the right end.

The way that you normally indicate exclusive and inclusive intervals in math is ) vs ], where ) is exclusive and ] is inclusive. Some folks will understand that. I don't think that anyone will understand that ... says anything about whether the end is inclusive or exclusive - not unless that's commonly used somewhere else that I'm not familiar with.

- Jonathan M Davis
June 23, 2013
Jonathan M Davis:

> The way that you normally indicate exclusive and inclusive intervals in math
> is ) vs ], where ) is exclusive and ] is inclusive. Some folks will understand
> that. I don't think that anyone will understand that ... says anything about
> whether the end is inclusive or exclusive - not unless that's commonly used somewhere else that I'm not familiar with.

I agree that such mathematical syntaxes are more commonly known than the ... syntax that is used in Perl and I think Ruby and few other languages.

In other nations mathematicians use [x, y[ to represent open or close intervals (that syntax is used in std.random too).

So maybe instead of (in interval x ... y) it's better to use (in interval [x, y]) and hope people will understand this doesn't follow the normal D/Python usage of closed-on-the-right intervals.

I have added a note in the ER:
http://d.puremagic.com/issues/show_bug.cgi?id=10455

Bye,
bearophile