Super-dee-duper D features

Bill Baxter dnewsgroup at billbaxter.com
Tue Feb 13 14:54:45 PST 2007


Andrei Alexandrescu (See Website For Email) wrote:
> Bill Baxter wrote:
>> janderson wrote:
>>> Andrei Alexandrescu (See Website For Email) wrote:
>>>> James Dennett wrote:
>>>>> C++, of course, has std::for_each(e.begin(), e.end(), do_x);
>>>>> in its library (though that's weaker than it could be because
>>>>> of lack of support for convenient anonymous functions/lambdas).
>>>>>
>>>>> C++0x is very likely to have for(v: e).  It's implemented
>>>>> in ConceptGCC already. Java already has essentially that,
>>>>> as does C#.  This really doesn't set D apart (but at least
>>>>> D isn't falling behind here).
>>>>
>>>> BTW, D might soon have simultaneous iteration that will blow away 
>>>> all conventional languages:
>>>>
>>>> foreach (i ; coll1) (j ; coll2)
>>>> {
>>>>   ... use i and j ...
>>>> }
>>>> continue foreach (i)
>>>> {
>>>>   ... coll2 finished; use i ...
>>>> }
>>>> continue foreach (j)
>>>> {
>>>>   ... coll1 finished; use j ...
>>>> }
>>>>
>>>> Andrei
>>>
>>> Maybe its a bit to late here however this syntax seems very special 
>>> case.  Can you explain why its necessary and how we would use it.  
>>> How would we do this currently (without meta programming)?
>>>
>>
>> Yeh, I don't get it either.  How would that help me implement merge() 
>> from merge sort for instance?
> 
> Merge bumps the iteration in both collections conditionally. The form 
> above bumps the iteration in the two collections unconditionally, until 
> one is finished; then it continues with the other until that is finished.

Yes, I get that.  My initial impression, though, was that iterating in 
lock step is just one particular case, and it seems kind of special case 
to warrant a new syntax.  It still doesn't get rid of the need for 
general iterators to implement more complicated things like merge sort.

But maybe it does cover the majority of cases.  I guess it's basically 
like 'for x,y in izip(list1,list2)' in Python.  But in python that's a 
library function, not a bit of language syntax.

--bb



More information about the Digitalmars-d mailing list