opCaret to complement opDollar when specifying slices

Gor Gyolchanyan gor.f.gyolchanyan at gmail.com
Wed Jun 6 05:00:40 PDT 2012


On Wed, Jun 6, 2012 at 3:53 PM, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> On Mon, 04 Jun 2012 17:23:57 -0400, Xinok <xinok at live.com> wrote:
>
>> On Saturday, 2 June 2012 at 11:49:17 UTC, Dario Schiavon wrote:
>>>
>>> Hi,
>>>
>>> I just read some old threads about opDollar and the wish to have it work
>>> for non zero-based arrays, arrays with gaps, associative arrays with
>>> non-numerical indices, and so on. It was suggested to define opDollar as the
>>> end of the array rather than the length (and perhaps rename opDollar to
>>> opEnd to reflect this interpretation), so that collection[someIndex .. $]
>>> would consistently refer to a slice from someIndex to the end of the
>>> collection (of course the keys must have a defined ordering for it to make
>>> sense).
>>>
>>> I'm just thinking, if we want to generalize slices for those cases,
>>> shouldn't we have a symmetrical operator for the first element of the array?
>>> Since the $ sign was evidently chosen to parallel the regexp syntax, why
>>> don't we add ^ to refer to the first element? This way, collection[^ .. $]
>>> would slice the entire collection, just like collection[].
>>>
>>> Until now, ^ is only used as a binary operator, so this addition
>>> shouldn't lead to ambiguous syntax. It surely wouldn't be used as often as
>>> the opDollar, so I understand if you oppose the idea, but it would at least
>>> make the language a little more "complete".
>>
>>
>> The problem I see with this, it would be a larger burden when writing
>> generic code. Libraries would have to be written to compensate for those
>> containers. I'd prefer that all containers are simply zero-based, unless
>> there's a need for negative indices (i.e. pointers). I think random-access
>> ranges may be intended to be zero-based as well.
>
>
> caret would have to map to 0 for slices and containers who already have a
> notion of first element being zero.
>
> This would not be hard.  And in fact, would make generic code *easier*.
>  Right now, you have to special case containers who support slicing but do
> not start on 0.  The only one I know of at this point is Red Black Tree.
>
> -Steve

Circular buffers essentially start nowhere and end nowhere. Having a
caret operator for slices would ease the manipulation of circular
buffers and would allow one to "rotate" the buffer, essentially
changing the cared and dollar value.

-- 
Bye,
Gor Gyolchanyan.


More information about the Digitalmars-d mailing list