15-Mar-2013 06:43, deadalnix пишет:
On Thursday, 14 March 2013 at 23:52:59 UTC, Nick Sabalausky wrote:
On Thu, 14 Mar 2013 17:54:52 -0400
Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote:
[snip]
That implicitly does the equivalent of ".save" on a mere InputRange
*twice*. The result, of course, is completely dependent on the input
range in question.
Passing range by value is completely undefined, which is IMO a big weak
spot of ranges.
What can be done in the mean time is stating somewhere prominent this:
Given InputRanges a & b:
1. a = b; //now 'a' can only be *either* an alias of 'b' or 'a' is a
copy of 'b'
2. a = move(b); //now a is the only copy (the only alias ;))
3. a = b.save(); //now a is guaranteed to be a shallow copy
By copy here it's implied that range preserves iteration state. The
underlying values may be changed elsewhere.
There could be some argument to make 1 always do 3 and trim it to 2
rules. But ehm, sorry, classes as ranges can't do that so we are stuck.
If I had to choose I'd drop the current OOP support of D in favor of
simplifying things (only half-joking) :)
--
Dmitry Olshansky