On Tue, 29 Nov 2011 15:06:11 -0500, Jonathan M Davis <jmdavisp...@gmx.com>
wrote:
On Tuesday, November 29, 2011 20:42:59 Marco Leise wrote:
Am 29.11.2011, 20:41 Uhr, schrieb Marco Leise <marco.le...@gmx.de>:
> Am 29.11.2011, 14:53 Uhr, schrieb bearophile
<bearophileh...@lycos.com>:
>> deadalnix:
>>> No it has nothing to do with this bug.
>>
>> I tend to agree.
>>
>>> But actually, this exemple should
>>> generate a warning at least, or being illegal eventually.
>>
>> I'd like that code to loop on all array 256 items once, and then stop
>>
>> :-)
>>
>> Bye,
>> bearophile
>
> Is it evil if I propose that 'i' should always be size_t and nothing
> else?
Yes, because you can iterate over -10..10 as well -.-
I would argue that i should always be size_t if it's an index. So,
foreach(i; -10 .. 10) {}
would be valid, but
int[] arr;
foreach(byte i, val; arr) {}
wouldn't be.
The type of the index should be irrelavent to the underlying loop
mechanism.
Note that the issue is really that foreach(T i, val; arr) {...} translates
to for(T i = 0; i < arr.length; ++i) {auto val = arr[i]; ...}
Why can't it be (aside from the limitation in for-loop syntax, but you get
the idea): for(size_t _i = 0, T i = _i; _i < arr.length; i = ++_i) {auto
val = arr[_i]; ...}
Same issue with foreach(i; -10..10), what if I wanted to do foreach (ubyte
i; ubyte.min..ubyte.max + 1). This should not result in an infinite loop,
I should be able to use foreach to iterate all the values of ubyte. The
compiler should just "figure out" how to do it right.
-Steve