opConcatAll?
Petar
Petar
Fri Jul 3 07:17:07 UTC 2020
On Thursday, 2 July 2020 at 20:26:15 UTC, Steven Schveighoffer
wrote:
> On 7/2/20 3:28 PM, Nick Treleaven wrote:
>> On Thursday, 2 July 2020 at 15:47:39 UTC, Steven Schveighoffer
>> wrote:
>>> a ~ b ~ c ~ d
>>>
>>> will translate to
>>>
>>> a.opConcatAll(b, c, d)
>>
>> Sounds good, although I think multiple other operations beside
>> concatenation could benefit from being intercepted:
>>
>> opNary(string op, T...)(T args)
>>
>> E.g. perhaps BigInt can avoid one or more reallocations for >2
>> args. The compiler would try opNary first in that case, and
>> fallback to successive calls to opBinary as now.
>>
>> In fact, maybe some types could benefit from intercepting
>> different operations at once:
>>
>> opNary(string[] ops, T...)(T args)
>
> That would be awesome, and cover my case!
>
> -Steve
We kind of have this already, but a bit closer to what jmh was
describing earlier.
Though it's just an implementation detail inside druntime for
implementing array ops:
https://github.com/dlang/druntime/blob/v2.092.1/src/core/internal/array/operations.d#L15-L36
I think that it would be pretty cool if this technique could be
applied to user-defined types (e.g. allow library authors to
provide their own `arrayOp` implementation of their types).
More information about the Digitalmars-d
mailing list