Proposal: Multidimensional opSlice solution

Don nospam at nospam.com
Mon Mar 8 11:46:26 PST 2010


Lars T. Kyllingstad wrote:
> Don wrote:
>> Norbert Nemec wrote:
>>> Don wrote:
>>>> Norbert Nemec wrote:
>>>>> Hi there,
>>>>>
>>>>> in implementing multi-dimensional arrays, the current way of 
>>>>> overloading the slicing operator does not scale up.
>>>>>
>>>>> Currently, there is opIndex working for an arbitrary number of 
>>>>> indices, but opSlice works only for one dimension. Ultimately, it 
>>>>> should be possible to allow slicing for more than one dimension, 
>>>>> and mixing it with indexing for e.g.:
>>>>>     A[4,7..8,7,2..5]
>>>>> So far, no clean solution for overloading this has been suggested.
>>>>
>>>> A solution was suggested while you were away.
>>>> You don't need a new opRange operator, a simple tuple struct like:
>>>> struct Slice(T) { T from; T to; }
>>>> in std.object is enough.
>>>> Note that:
>>>> A[4, Slice(7,8), 7, Slice(2,5)]
>>>>
>>>> will work with the existing compiler. So it's just a tiny syntax 
>>>> sugar issue.
>>>
>>> I know this solution. It is exactly the "syntax sugar" issue that I 
>>> see as the problem here:
>>>
>>> The compiler would need to be aware of the data type Slice. It would 
>>> therefore have to be something like a "builtin" type. If I am not 
>>> mistaken, the language definition so far never makes use of "builtin" 
>>> struct types.
>>
>> You are mistaken <g>.
>> object, TypeInfo, AssociativeArray, ...
>> Complex will be added to that list, too.
> 
> It will?  For complex literals, then?
> 
> -Lars
Hmmm. Maybe not. Complex literals will probably just disappear. We don't 
need them any more.



More information about the Digitalmars-d mailing list