opConcatAll?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Jul 3 15:39:08 UTC 2020


On 7/3/20 3:17 AM, Petar Kirov [ZombineDev] wrote:
> 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).

How are parens handled?


More information about the Digitalmars-d mailing list