Lars Ivar Igesund wrote:
Andrei Alexandrescu 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."
Ah, thanks :)
However, replacing the "single" opApply with 5 properties seems
somewhat excessive? At least it becomes even more obvious that a form
of (runtime queryable) struct interfaces will be necessary - the one
and only feature I really really want in D2.
opApply was very inefficient and defining an abstraction that allows
efficient iteration was a key goal of range design and foreach overhaul.
Using duck typing and implicit interfaces was a tried and true
technique. On top of this framework it is easy to define and use
explicit interfaces. Using classic interfaces would have hamstrung
efficiency of iteration from day one.
I'd be curious to find out more about a runtime queryable struct
interface. How would it work? What idioms would it enable?
Andrei