Why is size_t unsigned?
Maxim Fomin
maxim at maxim-fomin.ru
Mon Jul 22 09:29:38 PDT 2013
On Monday, 22 July 2013 at 15:51:45 UTC, monarch_dodra wrote:
> So... you are saying that if the grammar allows it, then the
> behavior is specified?
>
You may argue that although grammar does allows it, the feature
is semantically not defined. However here it is known what "ref
int i" means, to be more precise what you can do with objects
marked with ref attribute.
> All I see, is you iterating over references to the elements of
> an aggregate. The final behavior really depends on how said
> aggregate is implemented. If anything, if the behavior *was*
> defined, then I'd simply argue the behavior is wrong: I don't
> see why changing the values of the elements of the aggregate
> should change the amount of elements you iterate on at all.
> Also:
>
> //----
> int[] x = [1, 2, 3, 4, 5];
> foreach (ref i; iota(0, 5))
> {
> writeln(x[i]);
> ++i;
> }
> //----
>
> This also compiles, but I used a different aggregate, yet
> represents the same thing. Because it is implemented
> differently, I get a completely different result. Unless I'm
> mistaken, when a result depends on the implementation, and the
> implementation doesn't state what the result is, then that's
> what unspecified behavior is. (unspecified, not undefined).
This is different because in 0..5 ref int maps directly to
variable modified, but in iota() it maps to value returned by
.front property function and since it doesn't return by ref,
refness is wiped out. Behavior is defined in both cases.
>> This is an example of unspecified behavior:
>>
>> <...>
>
> What is "__limit1631" ? Doesn't compile for me.
This one may http://dpaste.dzfl.pl/3faf27ba
extern(C) int printf (const char*, ...);
void main()
{
int[] x = [1, 2, 3, 4, 5];
foreach (ref i; 0 .. 5)
{
__limit6--; // or 5 depending on dmd version
printf("%d\n", x[i]);
}
}
1
2
3
This is example of unspecified behavior (better undefined) due to
playing with __identifiers and how dmd bug can make D code looks
strange.
More information about the Digitalmars-d-learn
mailing list