Bring back foreach int indexes
Steven Schveighoffer
schveiguy at gmail.com
Thu Mar 28 02:04:44 UTC 2024
On Monday, 11 December 2023 at 22:22:27 UTC, Quirin Schroll wrote:
> On Wednesday, 29 November 2023 at 15:48:25 UTC, Steven
> Schveighoffer wrote:
>> On Wednesday, 29 November 2023 at 14:56:50 UTC, Steven
>> Schveighoffer wrote:
>>> I don’t know how many times I get caught with size_t indexes
>>> but I want them to be int or uint. It’s especially painful in
>>> my class that I’m teaching where I don’t want to yet explain
>>> why int doesn’t work there and have to introduce casting or
>>> use to!int. All for the possibility that I have an array
>>> larger than 2 billion elements.
>>>
>>> I am forgetting why we removed this in the first place.
>>>
>>> Can we have the compiler insert an assert at the loop start
>>> that the bounds are in range when you use a smaller int type?
>>> Clearly the common case is that the array is small enough for
>>> int indexes.
>>
>>
>> For those who are unaware, this used to work:
>>
>> ```d
>> auto arr = [1, 2, 3];
>> foreach(int idx, v; arr) {
>> ...
>> }
>> ```
>>
>> But was removed at some point. I think it should be brought
>> back (we are bringing stuff back now, right? Like hex strings?)
>>
>
> Couldn’t you write a function `withIntIndex` or
> `withIndexType!int` such that you can check the array is indeed
> short enough?
Yes, but... it is still in the compiler, just deprecated (as I
realized later in this thread). We can just undeprecate it (with
some extra checks added).
Using a range/opApply wrapper also is going to bloat the code a
bunch for not much benefit.
This really is a case of a problem being solved that didn't exist.
-Steve
More information about the Digitalmars-d
mailing list