Language Idea #6892: in array ops, enable mixing slices and random access ranges

Guillaume Piolat notthat at email.com
Tue Feb 6 12:20:48 UTC 2018


On Tuesday, 6 February 2018 at 02:14:35 UTC, Meta wrote:
> It's already possible, with only very slightly worse aesthetics:
>
> struct VecOp(T)
> {
>     T[] arr;
>
>     pragma(inline, true)
>     T[] opOpAssign(string op: "+", Range)(Range r)
>     {
>         int i;
>         foreach (e; r)
>         {
>             arr[i] += e;
>             i++;
>         }
>
>         return arr;
>     }
> }
>
> pragma(inline, true)
> VecOp!E vecOp(E)(return E[] arr)
> {
>     return typeof(return)(arr);
> }


I'm not sure if this is equivalent to what I asked, but in the 
event it is, here is a thought.

A fully featured VecOp could be part of druntime, and slices as 
array ops operands could be replaced by slice.vecOp by the 
compiler.

If this vectorize well, this allow to remove array ops from the 
language. (However it seems to me array ops are recognized at the 
operator level but well)


More information about the Digitalmars-d mailing list