Any chance to call Tango as Extended Standard Library

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Jan 18 08:28:11 PST 2009


Denis Koroskin wrote:
> On Sun, 18 Jan 2009 18:21:55 +0300, Andrei Alexandrescu 
> <SeeWebsiteForEmail at erdani.org> wrote:
> 
>> Lars Ivar Igesund wrote:
>>> Andrei Alexandrescu wrote:
>>>
>>>> For example, I'm not sure how code in std.algorithm could help
>>>> containers or streams in Tango (as it should), or how to reconcile
>>>> std.algorithm with std.core.array.
>>>  If the language (D2++) will have a new way of iteration and ranges
>>> known and enforced by the compiler, then I expect Tango to support
>>> those at some point, and std.algorithm would presumably just work.
>>> However, if it is based on some interface, ad hoc (these methods must
>>> be present) or properly via an interface Range { }, I would expect
>>> Tango developers to be involved in the process of defining those
>>> interfaces (if Tango is meant to use/know about them). Since I have
>>> seen neither, it is somewhat difficult to make a well informed
>>> comment on the subject.
>>
>> It's been there for a while now (since 25 Nov 2008).
>>
>> http://www.digitalmars.com/d/2.0/statement.html#ForeachStatement
>>
>> Scroll down to "Foreach over Structs and Classes with Ranges". The 
>> changelog reflects that too:
>>
>> http://www.digitalmars.com/d/2.0/changelog.html
>>
>> Version 2.021 mentions "Added range support to foreach statement."
>>
>>
>> Andrei
> 
> There is a typo in docs 
> (http://www.digitalmars.com/d/2.0/statement.html#ForeachStatement):
> 
> Foreach Range Properties:
> .rear    return the rightmost element of the range
> 
> ...
> 
> for (auto __r = range; !__r.empty; __r.retreat)
> {   auto e = __r.tail; //<- tail or rear?
>   ...
> }
> 

Turns out Walter didn't like "rear" for a certain reason. :o) He did 
take to my cute "toe" but in the end did not reflect that in the dox. 
The following code compiles and runs:

struct S
{
     bool empty() {return true;}
     void next() {}
     void retreat() {}
     int head() { return 0; }
     int toe() { return 0; }
}

void main() {
     S s;
     foreach (e; s) {}
     foreach_reverse (e; s) {}
}


Andrei





More information about the Digitalmars-d mailing list