Why is size_t unsigned?
bearophile
bearophileHUGS at lycos.com
Mon Jul 22 14:08:47 PDT 2013
Andrej Mitrovic:
> Actually it used to be a bug that writing to the index
> /without/ ref
> would end up changing the iteration order, but this was fixed in
> 2.063. It's in the changelog:
>
> http://dlang.org/changelog.html#foreachref
The right design in my opinion is to have the iteration variable
immutable on default, and mutable/reference on request. This
saves from bugs and offers new optimization opportunities. But
unfortunately D doesn't have a "mutable" keyword, D variables are
generally mutable on default, and Walter seemed not interested in
my numerous explanations that the mutable foreach iteration
variable is bug-prone. So Hara has adopted a compromise, now if
you don't use "ref" the actual iteration variable on an interval
doesn't change. But it's mutable on default.
So the standard idiom to use foreach on interval needs to be:
foreach (immutable i; 0 .. 10) { ... }
And the programmer has to remove that immutable only where really
the iteration variable must change :-)
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list