complement to $

Don nospam at nospam.com
Sat May 15 23:24:55 PDT 2010


Steven Schveighoffer wrote:
> Currently, D supports the special symbol $ to mean the end of a 
> container/range.
> 
> However, there is no analogous symbol to mean "beginning of a 
> container/range".  For arrays, there is none necessary, 0 is always the 
> first element.  But not all containers are arrays.
> 
> I'm running into a dilemma for dcollections, I have found a way to make 
> all containers support fast slicing (basically by imposing some 
> limitations), and I would like to support *both* beginning and end symbols.
> 
> Currently, you can slice something in dcollections via:
> 
> coll[coll.begin..coll.end];
> 
> I could replace that end with $, but what can I replace coll.begin 
> with?  0 doesn't make sense for things like linked lists, maps, sets, 
> basically anything that's not an array.
> 
> One thing that's nice about opDollar is I can make it return coll.end, 
> so I control the type.  With 0, I have no choice, I must take a uint, 
> which means I have to check to make sure it's always zero, and throw an 
> exception otherwise.
> 
> Would it make sense to have an equivalent symbol for the beginning of a 
> container/range?
> 
> In regex, ^ matches beginning of the line, $ matches end of the line -- 
> would there be any parsing ambiguity there?  I know ^ is a binary op, 
> and $ means nothing anywhere else, so the two are not exactly 
> equivalent.  I'm not very experienced on parsing ambiguities, but things 
> like ~ can be unambiguous as binary and unary ops, so maybe it is possible.
> 
> So how does this look:  coll[^..$];
> 
> Thoughts? other ideas?
> 
> -Steve

If we were to have something like this (and I'm quite unconvinced that 
it is desirable), I'd suggest something beginning with $, eg $begin.
But, it seems to me that the slicing syntax assumes that the slicing 
index can be mapped to the natural numbers. I think in cases where 
that's not true, slicing syntax just shouldn't be used.


More information about the Digitalmars-d mailing list