On Monday, November 01, 2010 06:16:47 Nick Treleaven wrote: > There's a C++0x proposal for a range-based 'for' statement: > http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html > > The upcoming GCC 4.6 C++ compiler changes list support for this: > http://gcc.gnu.org/gcc-4.6/changes.html > > I think the syntax could be useful for D to shorten and improve on the > status quo a little. Here's the C++ example: > > int array[5] = { 1, 2, 3, 4, 5 }; > for (int& x : array) > x *= 2; > > Currently D has: > > int array[5] = [1, 2, 3, 4, 5]; > foreach (ref x; array) > x *= 2; > > I think this is better: > > for (ref x : array) > x *= 2; > > Apart from being 4 chars shorter, I think it looks more natural using the > ':' instead of ';'. A lesser benefit is it allows reuse of the 'for' > keyword, making the 'foreach' keyword unnecessary. > > Maybe this would be acceptable for D?
The current syntax has been around for quite a while, it's in TDPL, and making the change gives no significant improvement. Generally speaking, we're not really supposed to be making any major changes from what TDPL says without a really good reason. Saving a few characters is not a really good reason. foreach works just fine and is arguably clearer, since you know right away that you're dealing with a foreach loop rather than a for loop - and while similar, they _are_ semantically different. And I don't see why : would be better than ;. IIRC, Java uses one and C# uses the other and you have to remember which uses which when moving between the two. And if you're looking to save typing, ; has the advantage that you don't have to use the shift key. If D had chosen to just reuse for, that would have been fine, but it didn't, and I think that it's fine as it is. Changing foreach to for would not be a productive change in the least. - Jonathan M Davis