foreach counter now must be size_t ?

Rubn where at is.this
Wed Feb 13 01:49:10 UTC 2019


On Saturday, 9 February 2019 at 02:13:13 UTC, Jonathan M Davis 
wrote:
> On Friday, February 8, 2019 5:05:09 PM MST Rubn via 
> Digitalmars-d wrote:
>> On Thursday, 7 February 2019 at 23:37:06 UTC, Jonathan M Davis
>>
>> wrote:
>> > On Thursday, February 7, 2019 4:02:14 PM MST Rubn via
>> >
>> > Digitalmars-d wrote:
>> >> On Thursday, 7 February 2019 at 03:20:03 UTC, Walter Bright
>> >>
>> >> wrote:
>> >> > On 2/6/2019 2:00 PM, jmh530 wrote:
>> >> >> mmap is something that I never really played around much 
>> >> >> with, but it seems like it would be useful for me in 
>> >> >> some cases. I've done some Monte Carlo simulations that 
>> >> >> end up causing me to run out of memory. Doing it as an 
>> >> >> mmap instead might be slower but at least I wouldn't run 
>> >> >> out of memory.
>> >> >
>> >> > Executables are not loaded into memory before running 
>> >> > them, they are mmap'ed into memory. Digital Mars C++ used 
>> >> > mmap for precompiled headers. There are all kinds of 
>> >> > uses, it's a very effective tool.
>> >>
>> >> I'll take that to mean you don't think this is a bug:
>> >>
>> >> @safe void foo(int[] a) {
>> >>
>> >>      for(int i = 0; i < a.length; ++i ) {
>> >>
>> >>         writeln( i );
>> >>
>> >>      }
>> >>
>> >> }
>> >>
>> >> Fucking classic.
>> >
>> > If you're trying to say that you think that that's a 
>> > compiler bug, then you misunderstand @safe. @safe code 
>> > cannot access invalid memory. It cannot have undefined 
>> > behavior. But it can have plenty of logic bugs, and what 
>> > that code has is a logic bug. It's at zero risk of accessing 
>> > invalid memory. It's just going to do the wrong thing if the 
>> > array is sufficiently large. The only way that array size 
>> > issues are an @safe-related bug is if you have code that 
>> > somehow manages to access the array out-of-bounds in spite 
>> > of the code being @safe.
>> >
>> > It's been argued before that comparing integer types of 
>> > different size or signedness should not be legal, because 
>> > it's a source of bugs, and maybe it shouldn't be legal, but 
>> > even if that's true, it's still not an issue with @safe.
>> >
>> > - Jonathan M Davis
>>
>> Good you agree it isn't a bug. Then we should remove this 
>> deprecation right?
>
> It's not a compiler bug, but the code is still buggy. Using int 
> for indexing is wrong in the general case. It works for smaller 
> arrays, but it's just a bug waiting to happen. I see no problem 
> with the deprecation. Quite the opposite. Using int when size_t 
> should be used is an incredibly common bug, and this helps 
> combat that.
>
> - Jonathan M Davis

It's a bandaid, the larger problem is allowing the comparison 
between int and size_t. Which my bet is how it is implemented 
internally, which is why foreach_reverse doesn't work cause it 
actually has to assign the counter a size_t.


More information about the Digitalmars-d mailing list