ADL

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Sat Sep 3 03:51:47 PDT 2016


On 03.09.2016 12:33, Walter Bright wrote:
> On 9/3/2016 3:14 AM, Timon Gehr wrote:
>> On 03.09.2016 10:37, Walter Bright wrote:
>>> None of the algorithms used in std.algorithm or elsewhere in Phobos have
>>> this particular issue.
>>
>> Yes they do. It is not possible to implement the range functions as
>> non-members.
>
> It's done for arrays via std.array.
> ...

This is not at all relevant when talking about 'this particular issue' 
that Manu brought up. std.range and std.algorithm import std.array.

>
>>> Nor have I seen ADL supported in any other
>>> language, despite many supporting generic algorithms.
>>
>> Which other such languages have templates like D or C++?
>
> I don't think it is a template issue. It's a name lookup issue.

It's both. ADL is mostly useless outside of generic code. It's mostly 
about how templates specify what interface they require and how the 
requirements are satisfied by the caller. ADL is a workaround for the 
lack of a convenient enough such protocol in templates. Other approaches 
to generics solve this particular issue quite elegantly. (E.g. type 
classes implicitly pass along the required free-function functionality.) 
D's templates don't, this is why it is a template issue.

By default, name lookup does not work in a way that would allow you to 
actually extend types using UFCS, and therefore none of Phobos works 
that way.

Note that I'm not saying ADL should be implemented, but the problem it 
addresses is real, and it exists in D.

> There's LINQ in C#, for example.

C# does not have templates.


More information about the Digitalmars-d mailing list