Questions about the slice operator
Jacob Carlborg
doob at me.com
Wed Apr 4 03:06:33 PDT 2012
On 2012-04-04 04:11, Jonathan M Davis wrote:
> foreach(i; 0 .. 5)
>
> is more efficient only because it has _nothing_ to do with arrays. Generalizing
> the syntax wouldn't help at all, and if it were generalized, it would arguably
> have to be consistent in all of its uses, in which case
>
> foreach(i; 0 .. 5)
>
> would become identical to
>
> foreach(i; [0, 1, 2, 3, 4])
>
> and therefore less efficient. Generalizing .. just doesn't make sense.
Why couldn't the .. syntax be syntax sugar for some kind of library
implement range type, just as what is done with associative arrays.
We could implement a new library type, named "range". Looking something
like this:
struct range
{
size_t start;
size_t end;
// implement the range interface or opApply
}
range r = 1 .. 5;
The above line would be syntax sugar for:
range r = range(1, 5);
void foo (range r)
{
foreach (e ; r) {}
}
foo(r);
This could then be taken advantage of in other parts of the language:
class A
{
int opSlice (range r); // new syntax
int opSlice (size_t start, size_t end); // old syntax
}
I think this would be completely backwards compatible as well.
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list