Andrei Alexandrescu:
> static foreach was part of the plan until recently, but Walter 
> encountered severe implementation difficulties so we had to abandon it.

I didn't know this.
It looks like a simple thing to implement, but it must be an illusion.


> I agree that it's odd that the same statement iterates at compile-time 
> or run-time depending on the iterated type.

Between implementing a good static foreach that can be used outside functions 
too, and the current situation, there is an intermediate possibility: to 
require the prefix keyword "static" before "foreach" when the foreach is done 
on a tuple, that is when it's static. This changes nothing in the current D2 
semantics. But it makes code a little more readable because you can tell apart 
with no problems the static case of loop on a tuple from the other one.

[Later if Walter finds a way to implement, the static foreach can be made 
richer, for example letting the compiler translate "static foreach (i; 10 .. 
20)" in a "static foreach (i; Range!(10, 20))". And even later if Walter is 
able the whole thing can be allowed outside functions.]

Bye,
bearophile

Reply via email to