On 3/7/2014 11:59 AM, Andrei Alexandrescu wrote:
On 3/6/14, 7:55 PM, Walter Bright wrote:
On 3/6/2014 7:22 PM, bearophile wrote:
One advantage of your change is that this code will work:
auto s = "hello".dup;
s.sort();
Yes, I hadn't thought of that.
The auto-decoding front() introduces all kinds of asymmetry in how
ranges work, and asymmetry is bad as it negatively impacts composability.
There's no asymmetry, and decoding helps composability as I demonstrated.
Here's one asymmetry:
-----------------------------
alias int T; // compiles
//alias char T; // fails to compile
struct Input(T) { T front(); bool empty(); void popFront(); }
struct Output(T) { void put(T); }
import std.array;
void copy(F,T)(F f, T t) {
while (!f.empty) {
t.put(f.front);
f.popFront();
}
}
void main() {
immutable(T)[] from;
Output!T to;
from.copy(to);
}
-------------------------------